jqgrid - 排序列中断组

jqgrid - sorting column breaks groups

我用的是jqgrid 4.6.0

当我单击列 header 对行进行排序时,初始分组中断。 数据类型是 JSON.

这是在 colModel:

        {name:'name',width:150,resizable:true,title:false,sortable:true, editable:true},
        {name:'value',width:80,resizable:true,title:true,sorttype:'number'},
        {name:'col_type',width:80,resizable:false,title:false, editable:false}

以及分组设置和附加设置:

loadonce:true,toppager:true,hidegrid:false,
grouping:true,gridview:true,rownumbers:false,
groupingView: {
    groupField : ['col_type'],
    groupText: ['<b> {0} </b>'],
    groupColumnShow : [false]
}

显然,我希望行的排序在组内。 另一个问题,在 colModel 中将列设置为 hidden: true 有什么意义吗?因为它已经在 groupingView.

中定义了

我已经在评论中向您解释过,从服务器返回的数据必须按 groupingView.groupField 排序(在您的情况下为 col_type 字段)。在另一边你有数据

var data = {"rows":[
        {"col_type":"group1",...},
        {"col_type":"group1",...},
        {"col_type":"aaa",...},
        {"col_type":"group3",...},
        {"col_type":"group3",...},
        {"col_type":"group4",...},
        {"col_type":"group4",...}
    ]};

其中 "aaa" 组顺序错误。 jqGrid 可能保留您的自定义订单,但您必须通知它。例如,您可以使用 sorttype 定义为函数或使用 sortfunc 回调函数。例如,您可以将输入数据扩展为以下

var data = {"rows":[
        {"col_type":"group1","col_type_order":1,...},
        {"col_type":"group1","col_type_order":1,...},
        {"col_type":"aaa","col_type_order":2,...},
        {"col_type":"group3","col_type_order":3,...},
        {"col_type":"group3","col_type_order":3,...},
        {"col_type":"group4","col_type_order":4,...},
        {"col_type":"group4","col_type_order":4,...}
    ]};

并将 col_type 列用作

{
    name: 'col_type', width:80, resizable:false, title:false,
    sorttype: function (value, item) {
        return item.col_type_order;
    }
}

更新: 查看修改后的演示 https://jsfiddle.net/uz7Ltbjk/7/。如果您使用旧的 jqGrid 并结合 loadonce: true 从服务器加载数据,那么您必须添加隐藏列 col_type_order。如果您使用免费的 jqGrid,那么您可以使用 additionalProperties。您可以使用的最简单的形式如下:

additionalProperties: ["col_type_order"]

它通知 jqGrid 从源数据中读取 附加属性(字段) 并将信息放入保存在 data 参数中的本地数据中。在这种情况下,您可以使用 any 附加信息扩展本地项目,例如,您可以稍后在排序期间使用这些信息。顺便说一下,一个人可以拥有 任何类型 附加属性的值。例如它可以是对象或数组。此功能可能对 master/details 网格或子网格有帮助。可以一次加载所有需要的信息然后使用它。