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