La tua domanda è interessante. Quindi +1 da me. Ho fatto una demo che mostra come implementare le tue esigenze.
L'idea principale dell'implementazione è la stessa di the answer. Suggerisco di mantenere lo stato dei gruppi espansi in un array expandedGroups
. Uso la richiamata onClickGroup
aggiunta in jqGrid 4.0.0 (vedere here). All'interno della callback loadComplete
provo ad espandere tutti gli elementi dall'array expandedGroups
.
Il vantaggio dell'implementazione è che lo stato espanso non scompare durante il paging, l'ordinamento e il filtraggio.
La demo è possibile vedere here. Qui di seguito nel codice dalla demo:
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});
AGGIORNATO: Raggruppamento modulo di jqGrid vengono cambiati in molte parti dal momento che la mia risposta originale. La demo modificata può trovare here. La parte più importante del codice utilizzato si può vedere qui
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 variabile inOnClickGroup
sono definiti in ambito esterno.
Grazie mille, ci sarebbe voluto un po 'di tempo per funzionare, ma la mia esperienza è limitata da questo nucleo. Piuttosto semplice, ma quando tutti sfruttano le specialità, aiuta la comunità. Grazie per avermi salvato il mio tempo, spero di aiutare gli altri allo stesso modo. –
@ D-S: sei il benvenuto! – Oleg
Ottima domanda e ottima risposta! – FastTrack