Bug report
When the filtering mode of the grid is set to "row" and the filter is programmatically cleared, the "Clear filter" button does not hide.
Reproduction of the problem
Set filterable: {mode: "row"}.
Filter for instance "Is null" or "Is not null".
Clear the filter - $("#grid").getKendoGrid().dataSource.filter({});
The "Clear filter" button is not hidden
sample Dojo:
https://dojo.telerik.com/AVOqifeK
If there is text in the filter's input, the button is hidden.
Expected/desired behavior
Hide the "Clear filter" button, irrespectively whether the filter has been cleared programmatically or via the UI.
Environment
Kendo UI version: 2019.1.220
jQuery version: 1.12.4
Browser: [all]
Your demo site is broken.
https://demos.telerik.com/kendo-ui/multicolumncombobox/index
Hi,
FluentValidation is an excellent tool that keep us from using DataAnnotations' Validator's decorators to achieve the entity class keeps as is, a just POCO class. The pros of this lead us to those developers, like me, that focus its backend (entities) development in Database-First processes, to lose decorators applied to the entity or model view class in every change made to the Database rather than the entity class, FluentValidation give us a better control of the validation rules, separates the validation from the entity class or view model class, testing is easier than DataAnnotations and support client-side validations. As far as I know, FluentValidation injects Data Annotation under the covers.
It would be great if you consider to take advantage of the integration with this tool in your route map.
Thanks
He have created this dojo to illustrate our point.
https://dojo.telerik.com/@navdeep316/iKAmeDAv
We would like to be able to be able to clone options from the top options and subsequently to be able to edit any cloned (child) option.
We are unable to figure out a way so that the child/cloned dropdowns can change state.
Is it a bug or a feature? How can we achieve our aim?
Thank you so much,
Dimitris
Every time the user scrolls in a grid with virtual scrolling, the grid asks for the total number of rows satisfying the filtering conditions. This causes the same exact query to be sent to the database multiple times. Instead cache this value and only ask for it if the filters change.
So with normal scrolling down the grid this will generate the following traffic to SQL:
Select Top 100, Skip 0 from Table where...
Select Count(*) from Table where (returns X number of rows)
Select Top 100, Skip 100 from Table where...
Select Count(*) from Table where (returns same X, exact same query)
Select Top 100, Skip 200 from Table where...
Select Count(*) from Table where (returns same X)
and so on
To see this open a copy of the grid with virtual scrolling:
https://dojo.telerik.com/eDImUhOV
Scroll the grid down:
In Developer Tools observer the result that is sent back to server includes the same:
__count: "830"
every time. In terms this will often generate a Select Count(*) being sent to the server in order to supply the answer for the current filters of the grid. An example when a Select count(*) is generated can be seen in your MVC wrappers, for example, where the toDataSourceResult() will cause this same query to repeatedly be sent to the database with every request for new data (use SQL Server Profiler or similiar to see the unnecessary queries). This is also true for your demo implemenations of the server code when used with Kendo UI.
For grids with large data sets, as is often used with virtual scrolling, this can be a slow query.
Instead of asking for the number of rows every time the grid is scrolled, only do so at inatialization and when the filtering conditions are changed (for example use a variable or an event to keep track of the dataSources filters changing).
If the program cannot assume that the same number of rows will be returned, then please implement a setting for developers that we can use to say that the data is not changing.
We look at historical data that are constant and with more than 100k rows, the Select count(*) puts an annecessary strain on the servers.
We could implement caching for this value, but instead the grid should not repetedly ask for the same value multiple times, instead of only when the filters change.
In a grid with virtualization, when just normally scrolling down requests for the exact same data are often sent multiple times after each other. The reason for this is probably that the grid sends an asynchronous request for example Top 100, Skip 200 and then does not keep track of that it is still waiting for a reply for this request, before asking for the same data a short period later.
Commonly requests for the same data is made 2 or 3 or more times after each other, causing performance problem at the server side and in many cases unnecessary calls to the database. Fixing this should lower the number of requests for data to the server considerably, maybe with a factor two or more with just normal grid operation when the user is just scrolling down to view more data in the grid.
To demonstrate the problem, open a copy of the virtualization grid demo, for example here:
https://dojo.telerik.com/iXijoyaY
Open the Developer Tools and just observe which network requests are sent to the server. Just scroll down in any way and observe that very often the exact same request is made. A request for the same data has the same Top and Skip values in the parameters sent the server. You can see the servers reply is exactly the same JSON data multiple times after each other.
Solving this performance problem almost completely would seemingly be to in a variable just keep track of the "Latest request" sent, since the problem happens mostly just with normal scrolling in one direction with request sent after each other. So one would need to keep track of that a call for Top 100, Skip 200 has been made, and if the program wants to request the exact same data again, just wait for a reply for the first request, instead of sending a new one. (If needed, send a new request only after a specific timeout for a reply for the first one).
A more thorough solution would be to have a data structure to keep track of the Top and Skip tuples for all the calls to the server that has not yet have had a reply from the server, and not repeat those exact same calls again if still waiting for a reply for the first request.
Export to PDF shows the header commands like "Export to PDF", etc. These should be configurable to not be displayed.
Similarly, using a .PdfExport event to hide and show the command columns is functional but should be included as a property to avoid the flashing that the hide/show does to a large element.
In the latest Kendo UI commercial zip, there is a file typescript/kendo.all.d.ts.
In the Grid class, a property is missing : the dataItems function.
You should add the bold line :
(...)
dataItem(row: JQuery): kendo.data.ObservableObject;
dataItems(): kendo.data.ObservableArray;
destroy(): void;
(...)
When the DateInput uses a day-first format, e.g. dd/MM/yyyy, if you try to type in 29/02 the DateInput auto-corrects it to 01/02, which is not intuitive to the user and requires them to go back and fix the date again after typing in a leap year.
The DateInput should allow the user to type in 29/02 until the year portion is not provided.
When a ContextMenu is opened for the first time, the animation is not executed. Every consequent open trigger the animation successfully.
The issue can be observed in the following Dojo.
Steps to reproduce:
When showOn assumes its default value(to work with hold event on touch devices), the ContextMenu cannot be displayed by tapping and holding over the target elements.
The iсsue can be reproduced with the ContextMenu Demo.
When a text with background color set is made bold and copy/pasted, the background color is not being preserved.
The issue can be reproduced on the following Dojo example.
Steps to reproduce:
Hi,
We are using the progress functionality across the applications, also its inbuilt in Grids/Tree View or most of the Kendo controls when data is loading. Now we are hit with an Accessibility issue as stated below in JAWS 2019.
"Issue: There is a loading screen that appears throughout the application. Sighted users are able to see the loading indicator, however, screen reader users should also be aware of the loading screen."
this is what we use explicitly in some places other than the inbuilt loading indicator.
// show loading indicator kendo.ui.progress($("#divCriteria"), true);
So is there any settings available that we can make this screen readable when the progress bar appears? meaning if we setup globally once place it takes care across everywhere? Including Grids / Treeview etc.
I read setting this role=” aria-busy=” will do the job, but this functionality already have the kendo scripts?
<div role="alert" aria-busy="alert"> Data is loading... </div>
Appreciate a quick response or solution for this...
Thanks
Sree
Hi,
I am facing an issue with Kendo grid ,i.e. Having more than one filter present in a grid and then deleting any one filter entry and clicking FILTER (or just pressing ENTER on keyboard) clears ALL filters.
In my Kendo grid , when I apply a filter to 2 columns, first I apply filter to numeric column which results in no value and, after that I applies the filter to a string column combined with numeric column which also results to no value, Nothing is displayed. But when I remove the value from textbox of numeric column and enter filter, no data is being displayed as string column filter is there but in case I remove the value from textbox of string column and enter filter , numeric column filter also gets removed. I also checked the Kendo functionality , but didn't find any solution for this problem.
Here's the code for Kendo Grid Filter which is causing the above issue.
$scope.DemoGrid = {
columns: [
{ field: 'ID', title: "ID", template: "<span><a href='' class='link-default' ng-click='getDetails(\"#=ID#\")'>#=ID#</a></span>" },
{ field: 'Type', filterable: false, title: "Type" },
{ field: 'Name', title: "Name", template: "<span>#=Name# </span>" },
{
field: 'Date', title: "Date", type: "date", format: "{0:dd-MMM-yyyy}", parseFormats: ["dd/MM/yyyy"],
filterable: {
ui: function (element) {
element.kendoDatePicker({
format: "dd-MMM-yyyy",
parseFormats: ["dd/MM/yyyy"]
});
}
}
}
,
{ field: '', title: 'Action', template: "<span><a href=\'" + DemoDownloadApi + "?id=#=DownloadId#\' role='button' class='btn btn-blue-primary'>Download</a></a></span>" },
{ field: "DownloadId", hidden: true, sortable: false },
],
pageable: {
buttonCount: 5,
pageSizes: [10, 20, 50, 100, 'All'],
input: true,
//refresh: false,
messages: {
display: Msg1,
empty: Msg2
}
},
sortable: true,
dataSource: DemoDataSource,
autoBind: false,
filterable: true,
scrollable: false,
resizable: true,
};
Provide an option that allows encrypting each chunk of data that is being sent by the Upload.