如何获取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
相关产品推荐
相关产品推荐

