jqgrid:基于两列排序

jqgrid: Sort based on two columns

本文关键字:排序 于两列 jqgrid      更新时间:2023-09-26

我正在尝试按两个不同的列对jqgrid中的列进行排序。例如,我有一个列"StoreName",它的排序将由列"d0_key"和"d0_tot_key"(两个整数)决定。我知道 colmodel 中的 sorttype 可用于创建自定义排序,但我没有找到考虑两列的算法。下面是数据的简单表示。

StoreName   d0_key  d0_tot_key
92nd Gessner    1   0
92nd Gessner    1   0
Total Sum       1   10
Total Avg       1   20
Annco           2   0
Annco           2   0
Total Sum       2   10
Total Avg       2   20

jqGrid 的 4.5.0 版本添加了多排序支持。你应该能够做这样的事情:

只需确保您已打开multiSort

$('#gridId').jqGrid({
    ...
    multiSort: true,
    ...
});

这将使您能够单击多个标题。如果要以编程方式排序,这应该可以工作:

$('#gridId')
    .jqGrid('sortGrid', 'd0_key', true, 'asc')
    .jqGrid('sortGrid', 'd0_tot_key', true, 'asc');

列模型对象上还有其他您可能感兴趣的附加属性,例如firstsortorder"asc"/"desc")和sortabletrue/false)。

此外,看起来 4.5.1 和 4.5.4 中有一些用于多重排序的错误修复,所以我会继续下载最新版本。

如果您需要按列排序StoreName则应根据"d0_key"和"d0_tot_key"列中的值进行排序,则应sorttype定义为StoreName列中的函数。在按列排序之前,将开始StoreName将调用sorttype列。在确定顺序或排序网格期间,将使用函数返回的值而不是StoreName列中的值。因此,您可以构造一些符合您需求的函数,例如d0_key * 1000 + d0_tot_key。如果我理解正确,那么它可以是关于以下内容

{
    name: "StoreName",
    sorttype: function (cell, obj) {
        return parseInt(obj.d0_key) * 1000 + parseInt(obj.d0_tot_key);
    },
    ...
}

答案,这个和另一个提供了sorttype作为函数的用法示例。在我看来,这个最接近你的要求。