我有jqgrid。我根据列值对几行进行了分组。工作演示可在link获得 定义jqGrid
的部分代码 var preclosingtable = $('#preclosing');
preclosingtable.jqGrid({
datatype: 'local',
data: data.DOCS,
colNames: ['', 'Documents Received', 'Comments', 'NA', 'DocGroup'],
colModel: [
{ name: 'Documents', index: 'Documents', align: 'left', sortable: false, editable: false, width: 20 },
{ name: 'DocsReceived', index: 'DocsReceived', align: 'center', sortable: false, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" }, formatter: "checkbox", width: 140 },
{ name: 'Comments', index: 'Comments', align: 'center', sortable: false, editable: true, edittype: "textarea", editoptions: { rows: "3", cols: "16" }, width: 180 },
{ name: 'NA', index: 'NA', editable: true, formatter: 'dynamicText', width: 150, edittype: 'custom', editoptions: { custom_element: radioelem, custom_value: radiovalue} },
{ name: 'DocGroup', index: 'DocGroup', editable: false, width: 1 }
],
rowNum: data.DOCS.length,
//rowList: [10, 20, 30],
pager: '#preclosingpagerdiv',
viewrecords: true,
sortorder: "asc",
sortname: 'Documents',
grouping: true,
groupingView: {
groupField: ['DocGroup'],
groupColumnShow: [false],
groupDataSorted: true,
groupOrder : 'asc'
},
localReader: {
id: 'ConfigId'
},
shrinkToFit: false,
height: 'auto',
loadComplete: function () {
HideGroupHeaders(this);
},
onSelectRow: function (id) {
preclosingtable.jqGrid('saveRow', previouslyselectedRow, false, 'clientArray');
previouslyselectedRow = SetJQGridRowEdit(id, previouslyselectedRow, preclosingtable);
}
});
以下是我的网格的样子
问题:是否可以对此网格中的行进行排序,以便最终网格在以下订单中具有行
答案 0 :(得分:10)
如果我正确理解了您的问题,您可以通过在DocGroup
列添加自定义排序功能(请参阅here,here和here)来解决您的问题分组:
sorttype: function (cellvalue, rowObject) {
return cellvalue? cellvalue : rowObject.Documents;
}
结果,具有空DocGroup
的输入数据将被排序,并按Documents
分组。您会在Fiddle
答案 1 :(得分:1)
我想到了两件事,您可以在网格中创建另一行进行排序。不要将任何数据放入服务器端的该列,然后将数据添加到jqGrid上的beforeProcessing函数中的列。
在beforeProcessing函数中,您可以测试分组数据并使用第一个字符填充此列,然后如果值为空(对于上面的D,Q示例),您将使用这些值。
这是beforeProcessing函数,您可以将其用作填充此列的基础,然后对其进行排序:
beforeProcessing: function (data, status, xhr) {
for (var x = 0, length = data.rows.length; x < length; x++) {
var valueToPutInSortColumn = ....
data.rows[x].cell.splice(sortColumnIndex, 0, valueToPutInSortColumn );
}
....