Reproduction steps:
1. Open column menu
2. Using arrow keys, go to Filter menu item.
3. Hit right arrow to open Filter submenu
4. Tab through filter submenu
5. Hit escape.
Expected behaviour: Filter submenu closes and focus returns to the parent column menu
Actual behaviour: Both filter and column menu are closed.
Snippet: http://dojo.telerik.com/@gearoidj/iqiwUCEp
This is an issue for accessibility users - there doesn't seem to be a way to return to the parent filter menu using the keyboard without closing all menus and reopening them.
There is one way for it to occur, and that is to use the mouse to place the focus on the Filter menu background - in this case hitting escape will close the Filter menu and focus will be returned to the parent column menu. However this is impractical for an accessibility user who is relying solely on keyboard navigation.
An example of where this (mostly) works is on the Columns submenu - the user can use the left arrow key or Escape to close the child menu or alternatively keep tabbing and they will eventually return to the parent menu (though if they do tab within the child menu, hitting Escape will close both the child and parent menus).
Hello.
When I tried your framework, I found a lot of positive and useful components, but unfortunately in our conditions I can not fully use the components with virtualization, because they can not work without counting the number of records. I have a lot of data and any scrolling, page selection, components such as combobox, dropdownlist, pager, grid, etc., every time i have to count the total number, and the queries are complex, not just select * from. Performance drops immediately, imagine i'm scrolling through a combobox, where there are 6 million records, where on every page Iihave to do select count(*) from table .. join...join... where .... and add to that another 100 users that all scroll the same combobox, for example. It would be great to be able to simply load data page by page without counting the total, but remove invisible elements from the DOM if the number of pages loaded is greater than a certain number.
Some other commercial frameworks have similar things.
I would not like to look for other alternatives, because you have done a very good and high-quality work. Maybe there are workarounds to this problem?
I'm not just talking about the grid, such controls combobox, dropdown do not have the functionality of endless scrolling. I'd like to see something like
https://github.com/ElemeFE/vue-infinite-scroll
And you can find out when the interface should finish scrolling by an empty response from the server, when there is no more data.
Why not just scroll through the list, adding a portion of data without a total, if the next portion is empty, then finished.
You have even the library train sewn count number when calling ToDataSourceResult on IQueryable
https://github.com/kendo-labs/dlinq-helpers/blob/master/Kendo.DynamicLinq/QueryableExtensions.cs
Counting the number of rows on complex queries is a rather expensive operation.
I would very much like to see such functionality on your widgets
PS: I have already talked on this topic with your developers
Ticket details
A difference between kendo.culture.ar.min.js:
pattern: ["-n %","n %"],
and other Arabic cultures, e.g. kendo.culture.ar-AE.min.js:
pattern: ["-n%","n%"],
A space is present in between the %
symbol and the number and the position of the percent symbol differs.
Format consistency.
Bug report
Almost all formatting tools such as fontName, fontSize, backColor, foreColor, bold, italic, etc. do not change bullets in unnumbered lists and numbers in numbered lists. Please see the sample below:
Best regards,
Dmitry Kostochko
Kendo UI mobile widgets are really falling behind and now need an urgent refresh. Most mobile widgets have not been updated in 3 to 4 years (https://github.com/telerik/kendo-ui-core/tree/master/src).
The most urgent is for styles to be updated to match LESS and SASS styles. Currently, styles are a mess and making a mobile app including the grid and other recent responsive widgets with consistent styles takes a lot more time than it should:
- NOVA has many specificities not available in other themes
- OS skins have no match to style the grid and other web responsive widgets
- Material UI is not consistent and up-to-date
Does Kendo.Ooxml.Workbook have a setter for which sheet opens after the workbook is saved as an excel, similar to activeSheet in Kendo.spreadsheet?
(Note: using Kendo MVC ver 2017.3.913.545 - it's not on the list below)
https://demos.telerik.com/aspnet-mvc/spreadsheet/server-side-import-export
Saving large data to xlsx takes longer time to complete.
Evaluate optimizing the value setting and the usage of CellSelection.
Binding the map layers to a SignalR Core datasource does not work. A runable project can be found in Ticket ID: 1401776
The basic configuration is:


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]
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
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.
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 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: