關於Ext的排序問題,一般涉及到兩種方式。
A。一種是默認的客戶端排序機制,對當前頁進行排序。sortable
這種排序模式不用多說,是人都會:
1.可以在Ext.grid.ColumnModel列模式中,設置sortable:false,此列為可排序。
var cm = new Ext.grid.ColumnModel([//定義列顯示模式 {id: "name",header: "部門名稱",dataIndex: 'name',width: 50, sortable:false},
]);
2.總體設置Ext.grid.ColumnModel的所有列的默認排序方式。
cm.defaultSortable = true;//默認列全部可排序
cm.setDefaultSort('name', 'DESC');也可如:按名字倒序
B。進行服務器端全局排序方式。remoteSort
這種排序方式,大家都知道,但是不一定能用好,需要一下幾個步驟,少一個都不行。
1.數據集Ext.data.Store中設置參數:remoteSort: true
2.列模式Ext.grid.ColumnModel中需要進行全局排序的列中加入參數:remoteSort: true
3.后台組合數據集的方法中,
通過:String sort= request.getParameter("sort");//要排序的列名--無需定義,ext自動后傳 String dir= request.getParameter("dir");//要排序的方式--無需定義,ext自動后傳
取數據集的時候,把這兩個參數加進去,就爽了。
這時候到前台試試,看看是不是就可以進行全局排序了。
下面是服務器端排序的具體補充:
首先獲取這兩個值: String sort= request.getParameter("sort");//要排序的列名--無需定義,ext自動后傳 String dir= request.getParameter("dir");//要排序的方式--無需定義,ext自動后傳 其中sort對應數據庫中的某個字段 dir表示為asc或desc即升序或降序 sql語句就是普通的語句: select * from user where id>50 order by sort dir
4.后台排序
在默認的情況下,Grid只能對當前頁的數據進行排序,如果對所有的數據排序,則需要將排序信息提交到后台,由后台將信息組裝到SQL里,然后再由后台將處理好的數據返回給前台。 var store = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url:'09_01.jsp'}), reader: new Ext.data.JsonReader({ totalProperty: 'totalProperty', root: 'root' }, [ {name: 'id'}, {name: 'name'}, {name: 'descn'} ]), remoteSort: true }); 其中remoteSort: true表示允許后台排序,這樣在排序時就會有變化,不會立即顯示出排序的結果,而是向后台提交兩個參數,分別是sort和dir,表示要排序的字段與升序或降序。
jsp則進行相應的處理 String start = request.getParameter("start"); String limit = request.getParameter("limit");
String sort = request.getParameter("sort"); String dir = request.getParameter("dir"); 再進行數據庫分頁,並返回json格式的分頁數據。
String sort= request.getParameter("sort");
if(sort != null){
String property = "";
String direction = "";
JSONArray myJsonArray = new JSONArray(sort);
for(int i=0 ; i < myJsonArray.length() ;i++){
JSONObject myjObject = myJsonArray.getJSONObject(i);
property = myjObject.getString("property");
direction = myjObject.getString("direction");
}
String sql="user_basic order by "+property+" "+direction+" ";
