jqgrid客户端排序

来源:互联网 发布:网络教育在职教育 编辑:程序博客网 时间:2024/06/06 07:12

jqgrid的客户端排序只需要在colModel的related column中把sortable设为true,把option loadonce设为true。启用客户端排序后,jqgrid将会把本页的所有数据download到local,值得注意的是,download的数据只是colModel中包含的数据,colModel中不包含的数据jqgrid会丢掉。

可以通过rowObject这个对象来验证。在local排序的时候,rowObject以name:value对的形式存储下colModel中的所有数据。以formatter为例,假使定义一个customer的checkbox:

formatter: function (cellValue, option, rowObject) {
var checkbox = '<input type="checkbox" disabled="disabled" rowId="'+option.rowId+'" col1=' +rowObject.col1+' col2='+rowObject.col2+ '/>';
return checkbox;}},

其中col1和col分别为server端传过来的数据,但是在colModel中只包含了col1,在客户端排序的时候checkbox的col2属性显示为undefined。

并且,当server端的传过来的数据如果有依赖关系,比如传过来的是Customer类,但它内部包含了Consume类,在初次download页面时可以通过rowObject.consume.comsumeAttribute来得到相应的值。但是在客户端排序之后,在采用rowObject.consume.comsumeAttribute这种方式来取值就会出错。jqgrid在local存储colModel的数据时按照colModel的name来存值,在客户端sorting之后我们只能用rowObject.colName(colModel中column的name)来取值。因此为保证客户端排序的正确性,如果存在上面的依赖关系的情况下,最好在beforeProcessing中对数据进行转换,例如:

data.Customer[i].total = data.Customer[i].Consume.total;

另外分组排序可能会遇到这样的问题:隐藏某一列并用这一列来排序,而这一列只包含两种状态,我们想通过checkbox的状态来显示这个属性的状态,同时通过改变checkbox的状态来update这个属性的值,这时我们的colModel中就有两列对应了response object的一个attribute,例如分别为col1(隐藏列)和col2(checkbox列),在它们的colModel中将jsonmap和xmlmap都指向response object的这个attribute(或者在beforeProcessing中对数据进行转换,但是name必须和attribute的name相同)。但是要想在客户端正常排序的话,col1的name必须和response object的attribute name相同,而col2的name可以随便命名。

原创粉丝点击