Je trouve votre question intéressante. Donc +1 de moi. J'ai fait une démo qui montre comment mettre en œuvre vos exigences.
L'idée principale de la mise en œuvre est la même que dans the answer. Je suggère simplement de maintenir l'état des groupes étendus dans un tableau expandedGroups
. J'utilise le rappel onClickGroup
ajouté dans jqGrid 4.0.0 (voir here). À l'intérieur du rappel loadComplete
j'essaie d'étendre tous les éléments du tableau expandedGroups
.
L'avantage de l'implémentation est que l'état déployé ne disparaît pas pendant la pagination, le tri et le filtrage.
La démo que vous pouvez voir here. Ci-dessous le code de la démo:
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});
MISE À JOUR: Module de regroupement jqGrid sont modifiés dans de nombreuses régions depuis ma première réponse. La démo modifiée peut trouver here. La partie la plus importante du code utilisé, on peut voir ci-dessous
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;
}
}
La inOnClickGroup
variables sont définies dans le périmètre extérieur.
Merci beaucoup, cela aurait pris un peu de temps pour travailler ceci, mais mon expérience est limitée à partir de ce noyau. Assez simple, mais quand tout le monde exploite ses spécialités, cela aide la communauté. Merci d'avoir économisé mon temps, j'espère pouvoir aider les autres de la même manière. –
@ D-S: Vous êtes les bienvenus! – Oleg
Bonne question et bonne réponse! – FastTrack