如何在ExtJS GridPanel中获取被过滤隐藏的所有已更新行?
解决ExtJS GridPanel获取所有已更新行(含筛选隐藏行)的问题
核心思路
GridPanel的所有数据都维护在绑定的Store中,筛选只是视图层的显示过滤,不会影响Store对数据修改状态的跟踪。直接从Store中提取修改记录即可,无需关注当前行是否可见。
具体实现方法
获取所有已修改/新增的记录
使用Store的getModifiedRecords()方法,它会返回所有状态为dirty(已修改)或phantom(新增)的记录,包含被筛选隐藏的行:// 获取Grid绑定的Store var store = grid.getStore(); // 获取所有已修改/新增的记录 var allModifiedRecords = store.getModifiedRecords();区分不同操作类型的记录
如果需要分别提取新增、修改、删除的记录,可使用以下细分方法:// 获取新增的记录(phantom属性为true) var addedRecords = store.getNewRecords(); // 获取已修改的记录(dirty属性为true且phantom为false) var updatedRecords = store.getUpdatedRecords(); // 获取已删除的记录 var removedRecords = store.getRemovedRecords();
关键注意事项
- 确保Store的
trackChanges属性为true(默认值即为true,除非手动修改过),否则Store不会跟踪数据的修改状态。 - 数据提交到服务器后,调用
store.commitChanges()清除所有记录的修改标记,避免后续重复提交相同数据。 - 无论使用表头筛选、
filter()还是filterBy()方法过滤数据,Store的底层完整数据和修改状态都不会被改变,上述方法始终有效。
内容的提问来源于stack exchange,提问作者user2022
相关产品推荐
相关产品推荐

