编辑:最终解决方案如下。
我是否尝试通过标题拖动或列选择器插件实现列重新排序,在重新排序列之后,单击任何列标题以对排序列中的结果进行排序,将其加载到表中的原始位置。使用可排序方法:
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 :(得分:0)
查看已编辑的问题。如果没有更新colModel的方法,最好的解决办法似乎是将状态保存功能放入window.onbeforeunload()。