jqGrid在分组时对列进行排序,考虑分组标题

我有jqgrid。 我根据列值对几行进行了分组。 在定义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); } }); 

以下是我的网格的样子 分组后的jqGrid

问题:是否可以对此网格中的行进行排序,以便最终网格具有以下顺序中的行

  • 阿拉巴马
  • d
  • 缅因州
  • 新泽西州
  • Q
  • 弗吉尼亚州

如果我正确理解您的问题,您可以通过在DocGroup列中添加自定义排序function(请参阅此处 , 此处和此处 )来解决您的问题:

 sorttype: function (cellvalue, rowObject) { return cellvalue? cellvalue : rowObject.Documents; } 

结果,具有空DocGroup的输入数据将被排序并按Documents分组。 您将在Fiddle上看到结果

在此处输入图像描述

我想到了两件事,您可以在网格中创建另一行进行排序。 不要将任何数据放入服务器端的该列,然后将数据添加到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 ); } ....