开发者社区 问答 正文

关于jqGrid数据排序的问题 - jqGrid报错

如上图,降序的时候,jqGrid会按前台方法排序,这样显然行不通!

(实际上后台数据是以1397、1000、999这样降序的形式返回的!)

说明:通过向后端ajax获取到jsonData,然后传给jqGrid的。没有使用jqGrid自带的方法获取数据。

个人感觉是jqGrid缓存的问题,但是我设置了很多种方法还是无效!

主要代码:

if(_this.hasLoadGrid){
	$node[0].grid.beginReq();
	$node[0].grid.endReq();
	$node.jqGrid('clearGridData');
	$node.jqGrid('setGridParam', {data: dataObj});
	$node.trigger('reloadGrid');	
}else{
	$node.jqGrid({
		data:jsonData,
		datatype:"local",
		cache: false,
		loadonce: false,
		onSortCol: function (index, colindex, sortorder){
			_this.sData.sort = '{"' + index + '":"' + sortorder + '"}';
			_this.view('dataList');//这里是ajax重新加载数据表的方法
		}
	}).trigger('GridUnload');
	_this.hasLoadGrid = true;
}






展开
收起
montos 2020-06-02 12:12:22 733 分享 版权
阿里云 AI 助理回答

根据你的描述,你遇到的问题是jqGrid在使用自定义排序逻辑时没有正确反映后台返回的降序数据。尽管后台数据是以1397、1000、999这样的降序排列返回的,但jqGrid似乎仍然按照自己的方式对数据进行了排序。这通常是因为jqGrid默认会尝试自己处理排序逻辑,特别是当datatype设置为"local"且数据一次性加载(loadonce: true)时。

针对你的问题,这里有几个可能的解决方案:

  1. 确保服务器返回的数据已正确排序:看起来你已经做到了这一点,确认后台确实按需返回了降序数据。

  2. 禁用jqGrid的本地排序:既然你希望完全控制排序逻辑,并且每次排序都通过AJAX重新获取数据,你应该确保jqGrid不进行任何本地排序操作。你可以通过设置sortnamesortorder参数来指示初始排序状态,同时确保loadonce设置为false(你已经这么做了),并且可以考虑添加ignoreReaderSort选项来告诉jqGrid忽略读取器的排序指令。

    $node.jqGrid({
       ...
       loadonce: false,
       ignoreReaderSort: true, // 添加这一行来忽略jqGrid的自动排序
       ...
    });
    
  3. 优化onSortCol事件处理:在你的onSortCol事件处理器中,你正在更新一个排序字符串并重新加载数据。确保这个过程正确地反映了你想要的排序方向,并且在请求数据时明确地将此排序信息传递给后端,以便后端能按正确的顺序返回数据。

  4. 清除缓存:虽然你提到已经尝试过多种方法来解决缓存问题,但确保在每次重新加载数据前,jqGrid的内部数据模型被正确清理是很重要的。你已经在代码中调用了clearGridDataendReq等方法,这是正确的做法。如果问题依旧,可以尝试在reloadGrid之前手动删除或重置jqGrid的排序状态,例如通过设置sortname为空或者重置postData.sortColumnpostData.sortOrder(如果适用)。

  5. 检查jqGrid版本:确保你使用的jqGrid版本没有已知的排序相关bug。有时候,升级到最新版本可以解决这些问题。

综上所述,重点在于确保jqGrid不会在客户端进行额外的排序操作,并且每次排序动作都能触发向服务器的请求以获取正确排序的数据。希望这些建议能帮助你解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: