jqgrid:基于两列排序

时间:2013-11-06 22:31:14

标签: javascript jquery jqgrid

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

2 个答案:

答案 0 :(得分:3)

版本4.5.0 of the jqGrid added multi-sort support。你应该可以这样做:

请确保您已启用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中有一些错误修复用于多重排序,所以我会继续下载最新版本。

答案 1 :(得分:2)

如果您需要按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

The answerthis oneanother one提供了使用{{1}}作为功能的示例。 This one在我看来,大部分都符合您的要求。