jqgrid对不同列上的本地数据进行自定义排序

时间:2011-04-09 00:09:13

标签: sorting jqgrid local

我有一个jqgrid,其中dataytype是本地的。自动排序适用于每列。我想知道是否可以根据另一列对不同的列进行排序。 为了更好地解释这一点,假设我有三列OrderNumberAddressPhone和一个名为State的隐藏列。点击Address列后,我实际上想要排序,如果State列是单击的那一列。

我正试图在onSortCol事件上执行此操作,我想要类似的内容:

onSortCol: function (index, iCol, sortorder) {

     if(index === "Address"){
         //CHANGE SORTED COLUMN TO STATE AND MAKE THE SORT              
     }
},

2 个答案:

答案 0 :(得分:6)

如果使用远程数据(datatype:'json'datatype:'xml'),则可以非常轻松地实现任何类型的排序。所以我想你的意思是jqGrid与你的问题中的本地数据。在这种情况下,我建议您在定义为函数的sorttype内使用colModel参数。

您可以为Address列定义sorttype属性,如下所示:

sorttype: function(cellValue, rowObject) {
    return rowObject.State;
}

或者喜欢这个:

sorttype: function(cellValue, rowObject) {
    return rowObject.State + "_" + cellValue;
}

参数cellValue是包含在比较操作中用于对网格进行排序的单元格。 rowObject是对象,它代表具有cellValue的整行。从函数cellValue返回另一个值为sorttype的值将跟随已撤回的值将用于比较操作而不是cellValue

sorttype实施的第一个示例中(见上文),Address列的排序将根据名称为State的列的包含进行。在第二个示例中,具有相同状态的行将按地址进行另外排序。

您可以查看小型演示here。如果单击“Tax”列,网格将按“id”列排序,其中id值将被解释为整数。

答案 1 :(得分:0)

如果您正在进行服务器端排序,您只需执行此操作:

if(sord == "Address"){
    sord = "State";
}

您是否尝试过为客户端排序做同样的事情:

onSortCol: function (index, iCol, sortorder) {    
    if(index === "Address"){
        index = "State";              
    } 
},