jqgrid - 列顺序随客户端排序而变化。怎么预防?

时间:2014-12-09 10:00:12

标签: jqgrid

我有一个jqgrid,我将订单保存在数据库中。在loadComplete上,我把:

loadComplete: function(){
initorderColumn($("#Table"),2);
}

这是这个功能:

function initorderColumn($jqGrid,tabletype){
        $.ajax({
               url:"use/getorder",
               type:"get",
               dataType:    "json",
               async: false,
               data:{"type":tabletype},
               success: function(a) {
                   if(a.mycolumnorder){
                       var myorder=a.mycolumnorder.split(',');
                       $jqGrid.jqGrid("remapColumns", myorder,true);
                   }

    }


       });

上述功能获取用户之前保存的顺序。问题是当用户对列进行排序时,订单会发生变化。我想当用户对列进行排序时,订单仍然存在。有什么想法吗?

这是jqgrid:

$("#Table").jqGrid({
            url: 'u.json,
            dataType: json,
            loadonce:true,
            colNames: msd.rise.columnDisplayNames,
            colModel: msd.rise.colModelDef,
            gridview: true,
            toppager: false,
            sortname: 'sd',
            sortorder: 'desc',
            sortable:true,
            loadComplete: function(){
            initorderColumn($("#Table"),2);
            var $self = $(this);
                if ($self.jqGrid("getGridParam", "datatype") === "json") {
                    setTimeout(function () {
                        $self.trigger("reloadGrid"); // Call to fix client-side sorting
                    }, 50);
                }
            }
});

1 个答案:

答案 0 :(得分:0)

您不希望用户能够更改应删除jqGrid的sortable:true选项的列顺序。或者,您可以允许这样做但您可以将用户喜欢的新列顺序保存到服务器。您只需要捕获订单的变化。

jqGrid支持jqGridRemapColumns事件,它允许您捕获网格中顺序的更改:

$("#Table").bind("jqGridRemapColumns", function () {
    // the order of columns is changed
    // you have to send the new column order to the server
});

另一个问题是,通过列的名称而不是按位置保存列位置可能更好。我的意思是需要permutation的索引数组(remapColumns参数)。保存用户喜欢看的数据库中的列列表可能是切实可行的。可以从服务器获取列表并在colModel中找到名称。在这种方式中,可以将列名列表转换为需要remapColumns的索引数组,然后才能调用remapColumns

最后一句话:可以在用于填充网格的url的主响应中包含有关列顺序的信息。因此,不需要使用async: false参数进行单独的Ajax调用。在beforeProcessing回调内部,可以将数据库中的列顺序列表与colModel中的当前列列表进行比较,并在需要时调用remapColumns