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

jqgrid-列顺序随客户端排序而变化。如何预防?,jqgrid,Jqgrid,我有一个jqgrid,我把订单保存在数据库中。我把它装上: loadComplete: function(){ initorderColumn($("#Table"),2); } 这个功能是什么: function initorderColumn($jqGrid,tabletype){ $.ajax({ url:"use/getorder", type:"get", dataType:

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

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);
                }
            }
});

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

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

$(“#表”).bind(“jqGridRemapColumns”,函数(){
//列的顺序已更改
//您必须将新列顺序发送到服务器
});
还有一个问题是,最好通过列的名称来保存列位置,而不是通过位置。我指的是需要
remapColumns
的索引数组(
permutation
参数)。在数据库中保存用户希望看到的列列表可能是可行的。可以从服务器获取列表,并在
colModel
中找到名称。通过这种方式,可以将列名列表转换为需要
remapColumns
的索引数组,只有这样才能调用
remapColumns


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

感谢您的回答。我从jqgrid中删除了sortable:true,但当我对列进行排序时,该列仍会向前移动。@amandachaw:不客气!如何对列进行排序?您发布的代码没有任何列排序。你的目标不明确。是否要保存数据库中的最后一列顺序,并在下次访问页面时将其还原?在这种情况下,您应该使用我描述的
jqGridRemapColumns
来检测更改并将新订单发布到服务器。如果要防止更改列位置,则必须确定允许用户更改顺序的代码位置。您发布的代码中唯一的位置是
sortable:true
。我已经在数据库中保存了列顺序。我的问题是,当我用新的顺序重新加载网格,并尝试进行客户端排序(jqgrid默认使用的排序)时,列向前移动,顺序被丢弃。@amandachaw:抱歉,但最后一条评论中的所有单词都非常不具体。您应该发布一个清晰的示例(例如演示),其中显示了您的具体操作、加载数据的方式、数据的格式等等。您应该描述清楚的测试用例,它可以用来重现问题。我确信,如果您想保存列的名称而不是索引(请参阅我的答案),那么您应该不会有问题。@amandachaw:很明显,您在实现方面存在一些问题,但您应该在描述上做到精确。到目前为止,您发布的代码中有很多明显的错误,比如
dataType:json
,而不是
dataType:json
,比如
url:'u.json,
,它们有语法错误等等。如果您以如此肮脏的形式发布您的实现,并且只描述一些产生问题的场景,那么您就无法帮助您找到实现中的错误。很抱歉