The Kendo UI grid has some great functionality out of the box, especially it’s ability to handle hierarchcal data with detail item templates.
I wanted to include a expand/collapse all button right within my grid. Here was the code I used to do it. Credit to Daniël from http://www.telerik.com/forums/collapse-all-grid-rows on giving me the code I needed to perform the collapse/expand on all rows at once.
You need to hook into the parent grid’s databound method to add the button inline. Then it’s just a matter of wiring up the click events and using Daniël’s code and you’re all set.
function gridDataBound(e) {
if ($("#MainGrid.k-widget.k-grid table thead.k-grid-header tr th.k-hierarchy-cell.k-header").find("span").length === 0) {
$("#MainGrid.k-widget.k-grid table thead.k-grid-header tr th.k-hierarchy-cell.k-header").append("<span tabindex=\"-1\" href=\"#\" id=\"expandAllCollapseAll\" onclick=\"expandAllCollapseAllClick()\" > </span>");
}
}
function expandAllCollapseAllClick() {
var expanded = $("#expandAllCollapseAll").hasClass("expanded");
if (!expanded) {
$("#expandAllCollapseAll").addClass("expanded");
$("#expandAllCollapseAll").css("background-position", "0 -224px");
ToggleAllKendoGridDetailRows("expand");
} else {
$("#expandAllCollapseAll").removeClass("expanded");
$("#expandAllCollapseAll").css("background-position", "0 -192px");
ToggleAllKendoGridDetailRows("collapse");
}
}
//Credit Daniël from http://www.telerik.com/forums/collapse-all-grid-rows
function ToggleAllKendoGridDetailRows(direction) {
//Get a collection of all rows in the grid
var grid = $('#MainGrid').data('kendoGrid');
var allMasterRows = grid.tbody.find('>tr.k-master-row');
//Loop through each row and collapse or expand the row depending on set deriction
if (direction == 'collapse') {
$(".toggleDetail").attr("onclick", "ToggleAllKendoGridDetailRows('expand')");
$(".toggleDetail").text("Expand all rows");
for (var i = 0; i < allMasterRows.length; i++) {
grid.collapseRow(allMasterRows.eq(i));
}
} else if (direction == 'expand') {
$(".toggleDetail").attr("onclick", "ToggleAllKendoGridDetailRows('collapse')");
$(".toggleDetail").text("Collapse all rows");
for (var i = 0; i < allMasterRows.length; i++) {
grid.expandRow(allMasterRows.eq(i));
}
}
Leave A Comment