Мне интересен ваш вопрос.Более того, поскольку вы тратите почти все свои очки репутации на награду, я решил, что вам действительно нужно решение проблемы.Поэтому я сделал для вас следующую демонстрацию .В начале он отображает полную сетку без группировки:
В отношении элемента select вы можете выбрать столбец группировки и получить в результате, как
или
зависит от выбора в элементе выбора.Если вы выберете «Нет группировки», исходный вид сетки будет восстановлен.
Для реализации я использовал groupSummary
с пользовательской реализацией summaryType .
Я рекомендую вам прочитать ответ , который дополнительно описывает, как можно настроить итоговую строку группировки.
HTML-код тела демо равен
<fieldset style="float:left" class="ui-widget ui-widget-content ui-corner-all ui-jqgrid">
<select id="chooseGrouping">
<option value="">No grouping</option>
<option value="State">State</option>
<option value="City">City</option>
<option value="Level">Level</option>
</select>
</fieldset>
<div style="clear:left">
<table id="grid"><tr><td></td></tr></table>
</div>
Соответствующий код JavaScript находится ниже:
var intTemplate = { formatter: 'integer', align: 'right', sorttype: 'int',
summaryType: 'sum'},
grouppingTemplate = {
summaryType: function (val, name, record) {
if (typeof (val) === "string") {
return record[name];
}
return val;
}
},
$grid = $("#grid");
$grid.jqGrid({
url: 'CustomGrouping2.xml',
height: 'auto',
colModel: [
{ name: 'Level', formatter: 'integer', sorttype: 'int', template: grouppingTemplate },
{ name: 'State', template: grouppingTemplate },
{ name: 'City', template: grouppingTemplate },
{ name: 'Number1', template: intTemplate },
{ name: 'Number2', template: intTemplate },
{ name: 'Number3', template: intTemplate },
{ name: 'Selected', template: intTemplate }
],
cmTemplate: { width: 90 },
xmlReader: { root: 'result' },
loadonce: true,
rowNum: 1000,
grouping: false,
groupingView: {
groupField: ['State'],
groupSummary: [true],
groupColumnShow: [true],
groupText: ['{0}'],
groupDataSorted: true,
showSummaryOnHide: true
},
loadComplete: function () {
if (this.p.grouping) {
$(this).children('tbody').children('tr').each(function () {
var $tr = $(this);
if (!$tr.hasClass('jqfoot')) {
$tr.hide();
}
});
}
}
});
$('#chooseGrouping').change(function () {
var index, count, sel = $('option:selected', this).val(),
allGroups = ["State", "City", "Level"];
if (sel === "") {
$grid.jqGrid('setGridParam', {grouping: false});
for (index = 0, count = allGroups.length; index < count; index++) {
$grid.jqGrid('showCol', allGroups[index]);
}
} else {
$grid.jqGrid('setGridParam', {grouping: true, groupingView: {groupField: [sel]}});
$grid.jqGrid('showCol', sel);
index = $.inArray(sel, allGroups);
if (index >= 0) {
allGroups.splice(index, 1);
for (index = 0, count = allGroups.length; index < count; index++) {
$grid.jqGrid('hideCol', allGroups[index]);
}
}
}
$grid.trigger('reloadGrid');
});