Morning,
I've been using the Kendo Grid for years and absolutely love it for what I can do with it, but every so often I get asked to stretch the functionality of what it can do, I haven't found much documentation on this, but i'll try my best to give an example of what I've done, and to see if there is a better way of doing it..
I have a field in my Grid that is a string, with multiple "Tags" explicitly given in the dataSource in filterable.
{
"columnMenu": {
"componentType": "modern"
},
"stickable": true,
"field": "conditions",
"filterable": {
"enabled": true,
"multi": true,
"search": true,
"dataSource": [
{
"conditions": "TEST123"
},
{
"conditions": "TEST"
},
{
"conditions": "ABC"
},
{
"conditions": "DEF"
}
]
},
"groupable": true,
"aggregates": "count",
"groupHeaderTemplate": "Conditions: #= value # (Count: #= count#)",
"sortable": true,
"title": "Conditions",
The data in the field is a string of comma separated tags, i.e.
TEST, ABC, DEF
I've updated the filter method on the Grid so that I can select multiple options in the filter menu, and it does a "contains" look up to match multiple hits.
filter: function(e){
this.columns.forEach(function(f){
if(e.field === f.field){
if(f.filterable.hasOwnProperty('dataSource')){
e.filter.filters.forEach(function(f){
f.operator = "contains";
e.filter.logic = "and";
})
}
}
})
},
I have two issues here.
1. I'm using contains, so if the tags are similar (TEST, TEST123), selecting TEST will show both TEST and TEST123 - which isn't ideal.
2. If I select an option from the filter menu, it doesn't remain checked if you were to go back into the filter menu again.
I've asked this question before and had some great help to get it to this point using: https://docs.telerik.com/kendo-ui/knowledge-base/grid-how-to-change-multi-checkbox-filter-to-contains but I'm wondering if there is a better way of achieving the functionality I'm looking for here with the grid. I added square brackets to the tags to distinguish them ([TEST], [TEST123]) , but my users didn't like this change.
Is there a way to do this without using contains?
I'd also like to be able to see the selected option in the filter menu - I can find the checkbox through jQuery, but I cannot toggle it's state..
e.filter.filters.forEach(function(f){
var checkbox = $(".k-filter-menu").find("input[value='"+f.value+"']");
console.log(checkbox);
checkbox.prop("checked", true).trigger("change");
checkbox.attr("checked", true).trigger("change");
f.operator = "contains";
e.filter.logic = "and";
})
Thanks for your help,
Matt
There is an issue with the Grid
Configuration for it to happen appears to be
The scenario is
Impact
Columns lose their distributed widths and the column being resized jumps away from the cursor.
An example is here:
Try resize the first column, you will observe the resized column growing in width and other columns losing their distributed widths. This leaves the cursor indicating an incorrect resize position.
Is there any chance this could be fixed / a work around be advised? Having the distributed column widths is this circumstance is good, but the behavior on resize is undesirable.
Having problems when using the showColumn() hideColumn() function for grids:
Why does hideColumn() function on grid scrunch up the width when enabling it?
Then when I check the checkbox to hide the first row:
It seems to scrunch the other rows to the LEFT? You demo in the DOJO doesn't do this... I was wondering if this is because I am using a hierarchical grid?
function toggleEditing(e){
var hideColumn = $(e.target).prop("checked");
var grid = $("#grid").data("kendoGrid");
if(hideColumn){
grid.hideColumn(0);
}
else {
grid.showColumn(0);
}
}
See my Kendo UI Dojo code for behavior:
https://dojo.telerik.com/UmAgoDEs/2
Thanks!
George
Hi
I'm using a kendoListView and a kendoPager like this :
$("#pagerLstArticle").kendoPager({
dataSource: articles,
pageSizes: [12, 24, 36, 48],
messages: {
display: "Articles {0} Ã {1} sur {2}"
},
});
I would like to adap the kendoPager pageSizes depending on differents panels displayed or not on the screen
I can manage the kendoListView page size easily but for the kendoPager I don't know
How can I do this ?
Thank you
Isabelle
Hi!! I'm having an issue with Kendo UI JQuery.
I'm using the grid, and I have my data source defined with schema inside. All the schema fields have the property editable in false.
At some point, I need to change some of them to editable true, but I'm not able to do it so far.
I tried getting the data from the grid and updating the Datasource object manually and after that read the Datasource and refresh the grid, but is not working.
Also, try setting a completely new Datasource, and after that read the Datasource and refresh the grid, but is not working.
Also, try destroying the grid a generating a new one, but the grid never refreshes and the editable continues in false.
I see the same issue on your pages
so my question is whether there is any way to prevent this, because when there are many columns, the last borders are seriously damaged as you can see:
Since printing from the scheduler uses the current view, I was would like to make the view be 2 months.
Am trying to show multiple projects and only 30 days worth isn't quite doing it.
SIMILARLY,
if I'm in near the end of the month, showing the Timeline Month view only shows me a few days into the future - I don't care about past days.
Is there a way to set the STARTING DATE in a month view?
IF SO, perhaps specifying an ENDING DATE is the answer to my first question (Start + 60).
Thx
Jaymer...
Hello,
We have a grid with a default grouping applied to it, and are trying to persist the expanded groups through a read operation (remote datasource).
We have been successful in persisting them through some operations using the following code:
function getExpandedGroups() {
expandedGroups = [];
try {
let groupRows = $(".k-grouping-row");
for (let i = 0; i < groupRows.length; i++) {
let e = groupRows[i];
let expanded = e.children[0]["ariaExpanded"];
if (expanded === "true") {
let groupName = $(e).find(".k-reset").text();
let slicePos = groupName.lastIndexOf(" (");
groupName = groupName.slice(0, slicePos);
expandedGroups.push(groupName);
}
}
}
catch { }
return expandedGroups;
}
function restoreExpandedGroups() {
try {
groupRows = $(".k-grouping-row");
for (let i = 0; i < groupRows.length; i++) {
let e = groupRows[i];
let groupName = $(e).find(".k-reset").text();
let slicePos = groupName.lastIndexOf(" (");
groupName = groupName.slice(0, slicePos);
if (expandedGroups.includes(groupName)) {
attachmentTable.expandGroup(e);
}
}
}
catch { }
}
which works fine if our code calls the read event, since we can execute it before and after eg.
let expandedGroups = getExpandedGroups();
attachmentTable.dataSource.read().then(function () {
restoreExpandedGroups(expandedGroups);
});
however, when we use any of the grid functionality like sorting on a column, there doesn't seem to be any events that we can subscribe to that occur after the grid sets the groups back to their collapsed state, and we aren't able to persist the grouping in the same way.
Are there any potential workarounds for this issue?
Thanks
Regards,
Will Douglas