Search code examples
jqgrid

Global Expand/ collapse button for jqGrid with subgrids


I am using jqGRid with subgrid configuration to display my data. I would like to have global expand & collapse button to display or hide all subgrid information. Does jqGrid library provide this feature by any means?


Solution

  • jqGrid has no "Expand/Collapse all". I modified the demo from the old answer which demonstrates creating on grid with local subgrids. The resulting demo you can see here:

    enter image description here

    and it has additional "+" button in the column header of "subgrids" column. If one clicks on the button all subgrids will be expanded:

    enter image description here

    I used the following code in the demo:

    var subGridOptions = $grid.jqGrid("getGridParam", "subGridOptions"),
        plusIcon = subGridOptions.plusicon,
        minusIcon = subGridOptions.minusicon,
        expandAllTitle = "Expand all subgrids",
        collapseAllTitle = "Collapse all subgrids";
    $("#jqgh_" + $grid[0].id + "_subgrid")
        .html('<a style="cursor: pointer;"><span class="ui-icon ' + plusIcon +
              '" title="' + expandAllTitle + '"></span></a>')
        .click(function () {
            var $spanIcon = $(this).find(">a>span"),
                $body = $(this).closest(".ui-jqgrid-view")
                    .find(">.ui-jqgrid-bdiv>div>.ui-jqgrid-btable>tbody");
            if ($spanIcon.hasClass(plusIcon)) {
                $spanIcon.removeClass(plusIcon)
                    .addClass(minusIcon)
                    .attr("title", collapseAllTitle);
                $body.find(">tr.jqgrow>td.sgcollapsed")
                    .click();
            } else {
                $spanIcon.removeClass(minusIcon)
                    .addClass(plusIcon)
                    .attr("title", expandAllTitle);
                $body.find(">tr.jqgrow>td.sgexpanded")
                    .click();
            }
        });