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

时间:2013-04-25 16:21:49

标签: jquery jqgrid jqgrid-asp.net

我有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);
        }
    });

以下是我的网格的样子 jqGrid after grouping

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

  • 阿拉巴马州
  • D
  • 缅因州
  • NewJersey
  • 弗吉尼亚

2 个答案:

答案 0 :(得分:10)

如果我正确理解了您的问题,您可以通过在DocGroup列添加自定义排序功能(请参阅hereherehere)来解决您的问题分组:

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

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

上看到结果

enter image description here

答案 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 );
            }
        ....