我正在为我的jqGrid网格使用过滤器,数据在组中,默认为崩溃的第一个状态。如果用户打开一个组或2(表示组),那么过滤器,网格重新加载数据,正确过滤它,但然后我松开用户打开的组的展开状态。有没有办法没有它,在进行过滤时切换回默认的折叠状态?
先谢谢。
答案 0 :(得分:2)
我觉得你的问题很有意思。所以来自我的+1。我做了一个演示,演示了如何实现您的要求。
实施的主要思想与the answer中的相同。我建议只在数组expandedGroups
中保持扩展组的状态。我在jqGrid 4.0.0中添加了onClickGroup
回调(参见here)。在loadComplete
回调内部,我尝试展开数组expandedGroups
中的所有项目。
实现的优点是扩展状态在分页,排序和过滤期间不会消失。
您可以看到here的演示。下面是演示代码:
var $grid = $("#list"), expandedGroups = [];
$grid.jqGrid({
// ... some jqGrid parameters
grouping: true,
groupingView: {
groupField: ['name'],
groupCollapse: true,
groupDataSorted: true
},
onClickGroup: function (hid, collapsed) {
var idPrefix = this.id + "ghead_", id, groupItem, i;
if (hid.length > idPrefix.length && hid.substr(0, idPrefix.length) === idPrefix) {
id = hid.substr(idPrefix.length);
groupItem = this.p.groupingView.sortnames[0][id];
if (typeof (groupItem) !== "undefined") {
i = $.inArray(expandedGroups[i], groups);
if (!collapsed && i < 0) {
expandedGroups.push(groupItem);
} else if (collapsed && i >= 0) {
expandedGroups.splice(i, 1); // remove groupItem from the list
}
}
}
},
loadComplete: function () {
var $this = $(this), i, l, index, groups = this.p.groupingView.sortnames[0];
for (i = 0, l = expandedGroups.length; i < l; i++) {
index = groups.indexOf(expandedGroups[i]);
if (i >= 0) {
$this.jqGrid('groupingToggle', this.id + 'ghead_' + index);
}
}
}
});
$grid.jqGrid('navGrid', '#pager', {add: false, edit: false, del: false}, {}, {}, {},
{multipleSearch: true, multipleGroup: true, closeOnEscape: true, showQuery: true,
closeAfterSearch: true});
更新:自我原来的回答以来,jqGrid的分组模块在很多方面都有所改变。修改后的演示版可以找到here。使用的代码中最重要的部分可以在下面看到
grouping: true,
groupingView: {
groupField: ["invdate"],
groupCollapse: true,
groupDataSorted: true
},
onClickGroup: function (hid, collapsed) {
var idPrefix = this.id + "ghead_", i, groupid,
$this = $(this),
groups = $(this).jqGrid("getGridParam", "groupingView").groups,
l = groups.length;
if (!inOnClickGroup) {
inOnClickGroup = true; // set to skip recursion
for (i = 0; i < l; i++) {
groupid = idPrefix + groups[i].idx + "_" + i;
if (groupid !== hid) {
$this.jqGrid("groupingToggle", groupid);
}
}
inOnClickGroup = false;
}
}
变量inOnClickGroup
在外部范围内定义。