我有一个 jqGrid,其中填充了来自服务器的数据,如下所示:
$("#dataGrid").jqGrid({
url: 'url/load.json',
datatype: 'json',
mtype: 'POST',
...
从服务器提取初始数据后,将创建并添加此网格中的一列。我试图对此列进行排序,但由于它不存在于数据库中,jqGrid 的默认排序失败,导致 SQL 错误。它尝试从服务器重新加载网格,并按不存在的列排序。
为了解决这个问题,我尝试在单击该特定列时在本地进行排序。 然而,无论我尝试什么,初始 URL 'load.json' 仍然被调用,导致上面提到的 SQL 错误。也许我没有做正确的事情?
在 loadComplete() 函数中我有以下内容:
$("#dataGrid_ColumnToSortLocally").on('click', function()
{
var grid = $("#dataGrid");
var postData = grid.jqGrid('getGridParam', 'postData');
var sortName = postData.sidx;
var sortOrder = postData.sord || 'asc';
if (sortName === 'ColumnToSortLocally')
{
var gridData = grid.jqGrid('getRowData');
gridData.sort(function(a, b)
{
return sortOrder === 'asc' ? a.ColumnToSortLocally - b.ColumnToSortLocally: b.ColumnToSortLocally - a.ColumnToSortLocally;
});
try
{
grid[0].p.datatype = 'local';
grid[0].p.url = null;
grid[0].p.data = gridData;
grid[0].p.records = gridData.length;
grid[0].p.page = 1;
$('#dataGrid').jqGrid('clearGridData').jqGrid('setGridParam',{data: gridData}).trigger("reloadGrid");
}
catch (error)
{
console.error('An error occurred:', error);
}
grid.jqGrid('setGridParam', {datatype:'json'});
}
});
一切似乎都工作正常,直到我触发网格上的重新加载。我的数据存在并且已正确排序,但是当我尝试使用已排序的数据在本地重新加载网格时,它仍然回调到服务器以按不存在的列进行排序。
如何在本地按这一特定列进行排序,同时仍保留服务器对其他列进行排序?
如有必要,我可以包含任何其他相关的代码片段。
感谢您的帮助!
这个解决方案对我有用(经过测试)
$("#dataGrid").jqGrid({
url: 'url/load.json',
datatype: 'json',
mtype: 'POST',
...
onSortCol : function(name, index, order) {
if(name === "ColumnToSortLocally") {
this.p.datatype = 'local';
this.p.data = $(this).jqGrid('getRowData');
}
return true;
},
loadComplete : function() {
this.p.datatype = "json"
}
});