jqgrid 中设置列不排序
背景
今天在做系统的功能时,当时有这么个需求:在添加了一行数据时,原本的排序的自动就不能再排序,也就是排序失效。
1. 使用onSortCol事件禁止排序列
当时使用了初始化时,使用onSortCol事件在初始化的时候,如果发现了添加行的标记为true的情况,就返回“stop”(返回stop之后列排序就失效了)。
然后出现了一个问题,排序功能确实是被禁止掉了,但是排序的上下箭头还是依然顽强的工作,此种方法带了操作上的困扰。
2. 单独禁止掉指定的方法
在网上搜索了一阵之后,jqgrid确实提供了禁止列排序的方法,可以在需要的地方调用。
1 //disable sorting of grid 2 var grid = $("# your jqgrid id"); 3 4 //get all column names 5 var columnNames = grid[0].p.colNames; 6 7 //iterate through each and disable 8 for (i = 0; i < columnNames.length; i++) { 9 grid.setColProp(columnNames[i], { sortable: false }); 10 }
这段代码,是执行不成功,因为colNames取得是显示的列名,其实项目中datafield设置的都是其它的名字,在colModel里面就是index的值,所以得如下改法:
1 //disable sorting of grid 2 var grid = $("# your jqgrid id"); 3 4 //get all column names 5 var columnNames = grid.jqGrid('getGridParam','colModel'); 6 7 //iterate through each and disable 8 for (i = 0; i < columnNames.length; i++) { 9 grid.setColProp(columnNames[i].index, { sortable: false }); 10 }
以上的代码的效果:1. 排序功能被禁止。 2. 列头的排序图标如果有的话点击也是不变化的。
其它代码片段:
1 var columnNames = grid[0].p.colNames; 2 colNames=$("#UsersGrid").jqGrid('getGridParam','colNames') 3 4 var columnNames = grid[0].p.colModel; 5 colModel=$("#UsersGrid").jqGrid('getGridParam','colModel')
总结
jqgrid的特性还是非常棒,在发现问题的时候一般的情况下从jqgrid的设计角度都会有相对应的解决方法的。