jqGrid - 重新排序列后,将数据排序到原始列

时间:2013-01-17 21:01:43

标签: jqgrid jquery-ui-sortable

编辑:最终解决方案如下。

我是否尝试通过标题拖动或列选择器插件实现列重新排序,在重新排序列之后,单击任何列标题以对排序列中的结果进行排序,将其加载到表中的原始位置。使用可排序方法:

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()。这样,只有在用户退出页面时才会保存状态。 希望这有助于其他人。

1 个答案:

答案 0 :(得分:0)

查看已编辑的问题。如果没有更新colModel的方法,最好的解决办法似乎是将状态保存功能放入window.onbeforeunload()。