You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取jqGrid中已排序且编辑后的全部网格数据?

获取jqGrid已排序且编辑后的全部数据的方法

要同时拿到行内编辑后的修改和排序后的完整数据,得两步走:先同步编辑内容到内部数据,再按当前排序规则对全量数据排序。

步骤1:同步行内编辑的修改到jqGrid内部数据

行内编辑的修改默认只停留在页面DOM里,不会自动更新到getGridParam('data')返回的数组中。所以在获取数据前,要确保所有编辑过的行都保存完毕:

  • 如果知道具体的编辑行ID,可以直接调用:
    $("#grid").jqGrid('saveRow', 编辑行ID);
    
  • 如果不确定哪些行被编辑过,遍历所有行检查并保存:
    var grid = $("#grid");
    var rows = grid.jqGrid('getDataIDs');
    for(var i=0; i<rows.length; i++){
        // 检查行是否处于编辑状态
        if(grid.jqGrid('getGridParam', 'editRow') === rows[i]){
            grid.jqGrid('saveRow', rows[i]);
        }
    }
    

步骤2:获取全量数据并按当前排序规则排序

同步完成后,先拿到全量数据,再根据jqGrid当前的排序配置对数据排序:

// 获取当前排序字段和顺序
var sortName = $("#grid").jqGrid('getGridParam', 'sortname');
var sortOrder = $("#grid").jqGrid('getGridParam', 'sortorder');

// 获取同步后的全量数据
var allData = $("#grid").jqGrid('getGridParam', 'data');

// 对数据进行排序,可根据实际数据类型调整逻辑
allData.sort(function(a, b){
    var valA = a[sortName], valB = b[sortName];
    if(typeof valA === 'string' && typeof valB === 'string'){
        return sortOrder === 'asc' ? valA.localeCompare(valB) : valB.localeCompare(valA);
    } else {
        return sortOrder === 'asc' ? (valA - valB) : (valB - valA);
    }
});

// 此时allData就是已排序且包含编辑修改的全量数据
console.log(allData);

补充说明

如果你的jqGrid用的是本地数据模式(datatype: 'local'),排序逻辑可以完全按上面的方式处理。如果是远程数据模式但已加载全量数据到本地,这个方法同样适用。

内容的提问来源于stack exchange,提问作者nanami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:05:19