我有一个jqGrid,我正在对客户端进行排序,所以我使用的是 sortGrid 方法。但是,此方法只接受两个参数:列名称和是否应重新加载网格。
我希望有条件地使用此方法对升序和降序进行排序。但是,由于排序顺序不是参数,因此方法默认为升序排序。
我目前有一个解决方法,如果列应按降序排序,我会两次调用 sortGrid 方法:
if (sortCol) {
$("#gridID").sortGrid(sortCol);
//If descending, need to apply the sort a 2nd time
if (sortOrder === "desc") {
$("gridID").sortGrid(sortCol);
}
}
这似乎可以解决问题,至少在我的localhost上进行测试时。但是,当移动到实时环境时,它似乎偶尔也不起作用。
有更好的方法吗?
答案 0 :(得分:0)
您可以使用api设置网格的排序顺序:
$("#gridID").jqGrid('setGridParam', {sortorder: "desc"}).trigger('reloadGrid');
api调用将触发重新加载网格,因此您不应通过sortGrid方法调用发出重新加载。
答案 1 :(得分:0)
我有同样的问题,sortGrid()不能按降序工作。
但是,问题不在于它不起作用,实际上是loadonce:true属性。
如果使用loadonce:true,则jqGrid在第一次从网格加载数据后将数据类型参数更改为“ local”。接下来的所有网格重新加载(排序,分页,过滤)都在本地进行。如果要再次从服务器刷新网格数据,则应将数据类型设置为其原始值(“ json”或“ xml”)。
因此,我们需要克服一些困难,并在loadComplete之后执行sortGrid():
这是在加载网格后完美选择页面和排序选项的代码。
$('#myGrid').trigger("reloadGrid");
//SORTED_COLUMN is Global
var DEFAULT_SORTED = false;
if (SORTED_COLUMN.index != undefined)
DEFAULT_SORTED = true;
$("#myGrid").jqGrid({
datatype : "local",
autowidth : true,
altclass : "jqgridAltRow",
altRows :true,
shrinkToFit :true,
loadonce: true,
data :data,
editurl: 'clientArray', // to give a successful call after inline editing,
page: CURRENT_PAGE,
//method : 'post',
cellEdit : 'true',
cellsubmit : 'remote',
beforeRequest: function () {
responsive_jqgrid($(".ui-jqgrid"));
},
onSortCol: function (index, columnIndex, sortOrder) {
SORTED_COLUMN.index = index;
SORTED_COLUMN.columnIndex = columnIndex;
SORTED_COLUMN.sortOrder = sortOrder;
},
loadComplete: function(){
$.fn.jqm = undefined;
setTimeout(function(){
if(DEFAULT_SORTED){
DEFAULT_SORTED = false;
$('#myGrid').jqGrid('sortGrid', SORTED_COLUMN.index, false, SORTED_COLUMN.sortOrder);
$('#myGrid').trigger('reloadGrid', [{page: CURRENT_PAGE}]);
}
}, 100);
...
if(DEFAULT_SORTED)此检查很重要,否则sortGrid()将以递归方式执行。
希望对您有所帮助,谢谢:)