背景
今天在做系統的功能時,當時有這么個需求:在添加了一行數據時,原本的排序的自動就不能再排序,也就是排序失效。
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的設計角度都會有相對應的解決方法的。