2013-01-17 62 views
1

編輯:最終解決方案如下。jqGrid - 將列重新排序後,將地圖數據分類到原始列

是否嘗試通過標題拖動或通過列選擇器插件實現列重新排序,重新排序列後,單擊任何列標題以排序結果排序列中的結果加載到其原始位置表。使用可排序的方法:

sortable: { 

update: function (perm) { 
    /* 
    * code to save the new colmodel goes here 
    */ 
    // the following line doesn't seem to do anything... just seems to return an array identical to 'perm' 
    $("#mainGrid").jqGrid("getGridParam", "remapColumns"); 

    // if included, the next line causes the headers to not move 
    $("#mainGrid").jqGrid("remapColumns", perm, true); 

    // this alternate allows them to move, but the newly sorted columns still get remapped to their original position 
    $("#mainGrid").jqGrid("remapColumns", [0,1,2,3,4,5,6,7,8,9,10,11,12], true); 

    /* the following allows the headers to move, and allows the sort to occur ONLY 
    * if the order coming back from the database is unchanged. Note that in my real 
    * code I create an array of consecutive integers to pass as the first param to 
    * remapColumns() 
    */ 
    $("#mainGrid").jqGrid("remapColumns", [0,1,2,3,4,5,6,7,8,9,10,11,12], true, false); 
} 
} 

當頁面第一次到達時,它會從xml文件創建默認列模型。當用戶重新排列標題時,新列模型和列名稱將作爲JSON字符串存儲在數據庫中。當用戶進行另一次數據庫調用時,該函數從數據庫中讀取新的列順序,並使用新的順序創建數據數組。

問題似乎是,在jqGrid重新映射列之後,它仍然希望以原始順序從服務器返回數據。所以如果原始數據是

[ [A1, B1, C1], [A2, B2, C2], [A3, B3, C3] ] 

將列重新映射到訂單C | A | B,jqGrid仍然希望數據以原始順序返回。

我最終的解決方案是從sortable.update()函數中刪除保存列模型狀態的代碼,並將其放入window.onbeforeunload()。這樣,狀態僅在用戶退出頁面時保存。 希望這可以幫助別人。

+0

如果你解決了你的問題,你應該在下面標記你的答案並將其標記爲已解決。 – Mark

回答

0

查看編輯的問題。如果沒有更新colModel的方法,最好的解決方案似乎會將狀態保存功能放入window.onbeforeunload()中。