3

我正在尝试按两个不同的列对 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
4

2 回答 2

3

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") 和sortable( true/ false)。

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

于 2013-11-06T22:59:44.197 回答
2

如果您需要StoreName根据列“d0_key”和“d0_tot_key”中的值进行按列排序,则应在列中定义为sorttype 函数StoreNameStoreName在开始按列排序之前,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提供了作为函数使用的例子。在我看来,这似乎最接近您的要求。

于 2013-11-06T23:25:45.630 回答