jqgrid-列顺序随客户端排序而变化。如何预防?
我有一个jqgrid,我把订单保存在数据库中。我把它装上:jqgrid-列顺序随客户端排序而变化。如何预防?,jqgrid,Jqgrid,我有一个jqgrid,我把订单保存在数据库中。我把它装上: loadComplete: function(){ initorderColumn($("#Table"),2); } 这个功能是什么: function initorderColumn($jqGrid,tabletype){ $.ajax({ url:"use/getorder", type:"get", dataType:
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,
,它们有语法错误等等。如果您以如此肮脏的形式发布您的实现,并且只描述一些产生问题的场景,那么您就无法帮助您找到实现中的错误。很抱歉