我有一个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);
}
}
});
答案 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
。