2011-04-09 134 views
1

我有一个jqgrid其中dataytype是本地的。自动排序对每一列都正常工作。我想知道是否可以根据另一列对不同的列进行排序。 为了更好地解释这个,我们假设我有三列OrderNumber,Address,Phone,以及一个名为State的隐藏列。当点击Address列时,我实际上想要排序,如果State列是单击的那一列。jqgrid自定义排序不同列上的本地数据

我试图做到这一点的onSortCol事件,我想是这样的:

onSortCol: function (index, iCol, sortorder) { 

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

回答

0

如果你在做服务器端排序,你会只是这样做:

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

有你尝试为您的客户端排序:

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

是的我试图做到这一点,但即使您将索引更改为“状态”,排序也会通过“地址”进行排序。 – Alex 2011-04-11 15:35:25

5

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

可以定义为Addresssorttype属性,它看起来像下面这样:

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

或像这样的:

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

参数cellValue是包含电池,其将在用于比较操作来排序网格。 rowObject是下一个具有cellValue的全行下降的对象。 Returnung作为cellValue的另一个值来自函数sorttype将遵循将返回值将用于比较操作而不是cellValue

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

你可以看看小演示here。如果您点击“税”列,网格将按“id”列进行排序,其中id值将被解释为整数。