how to retain expand/collapse state in jqgrid grouping?

前端 未结 2 648
一向
一向 2020-12-22 04:18

I have implemented a jqgrid in grouping method. By default I have kept the groups collapsed using groupCollapse:true parameter of jqgrid. My grid works well but

相关标签:
2条回答
  • 2020-12-22 04:25

    Please write always which version of jqGrid, which you use (can use), and from which fork (free jqGrid, commercial Guriddo jqGrid JS or an old jqGrid in version <=4.7).

    Your requirements could be easy realized in "free jqGrid", which I develop. It allows to use groupCollapse as callback function, which returns Boolean (see the issue). In combination with onClickGroup callback or jqGridGroupingClickGroup event one can easy persist the grouping state.

    UPDATED: I created the demo https://jsfiddle.net/92da8xhq/, which demonstrates how one can persist the collapsing state in the grouping grid. Below I describe shortly the code. The demo uses one level of grouping to make the code more simple for understanding.

    I added custom collapsedGroups: {} parameter to jqGrid. We will use the parameter to hold the list of collapsed groups. I used collapsedGroups: { "test2": true } in the demo to demonstrated that we can create the grid with some collapsed groups at the beginning. We don't use the value of the property of collapsedGroups object. Just the existence of the property test2 for example means that the group with the value test2 has collapsed state.

    The demo uses groupCollapse property of groupingView defined as the callback function. The function tests whether the group is in the list of collapsed groups (has collapsedGroups property with some value)

    groupingView: {
        groupField: ["name"],
        groupCollapse: function (options) {
            var collapsedGroups = $(this).jqGrid("getGridParam", "collapsedGroups") || {};
            // options looks like { group: number, rowid: string }
            if (collapsedGroups.hasOwnProperty(options.group.value)) {
                return true;
            }
            return false;
        }
    }
    

    We adjust additionally the properties of the custom collapsedGroups parameter after expanding/collapsing of the group. We use the following onClickGroup callback:

    onClickGroup: function (hid, isCollapsed) {
        var p = $(this).jqGrid("getGridParam"),
            iGroup = $(this).jqGrid("getGroupHeaderIndex", hid),
            group = p.groupingView.groups[iGroup];
    
        if (p.collapsedGroups == null) {
            // be sure that the custom parameter is initialized as an empty object
            p.collapsedGroups = {};
        }
        if (isCollapsed) {
            // we place group.value in the p.collapsedGroups object as a property
            if (!p.collapsedGroups.hasOwnProperty(group.value)) {
                // create the property group.value in with some value
                p.collapsedGroups[group.value] = true;
            }
        } else if (p.collapsedGroups.hasOwnProperty(group.value)) {
            // remove group.value property from the p.collapsedGroups object
            delete p.collapsedGroups[group.value];
        }
    }
    
    0 讨论(0)
  • 2020-12-22 04:45
    groupingView: {
        groupCollapse: true,
                groupField: ["name"],
                plusicon: 'ace-icon fa fa-plus-square purple',
                minusicon: 'ace-icon fa fa-edit red'
    }
    
    0 讨论(0)
提交回复
热议问题