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

AG-GRID批量删除选中行时每次仅删除27条如何解决?

问题产生原因

  • 引用联动导致遍历丢失:你代码中使用的selectedItems如果是AG-GRID直接返回的选中集合引用,调用node.setSelected(false)时,AG-GRID会实时从selectedItems中移除对应节点,数组长度动态缩短,导致includes判断漏过大量未处理的ID。
  • 行虚拟化导致节点不全:AG-GRID默认开启行虚拟化优化,仅渲染视口范围内的行,如果你获取的allItems是通过getRenderedNodes()返回的已渲染节点,默认只会返回当前可见的20-30行(对应你碰到的每次处理27条的情况),非视口的节点没有被遍历到。

修复方案

先对需要处理的ID生成独立快照,再用AG-GRID官方全节点遍历API处理,不受虚拟化和动态集合的影响,代码示例如下:

// 1. 生成目标ID的独立快照,用Set提升查询效率,切断和AG-GRID动态集合的联动
const targetIdSet = new Set(selectedItems.map(item => item.id));
// 2. 用官方API遍历全量节点,覆盖所有行不受虚拟化限制
gridApi.forEachNode(node => {
  if (targetIdSet.has(node.data.id)) {
    // 第二个参数设为false,关闭单次修改的事件触发,避免批量操作时的性能损耗
    node.setSelected(false, false);
  }
});

// 若你的实际需求是直接删除行而非取消选中,可直接用批量事务API,无需遍历:
// const deleteRows = selectedItems.map(item => ({id: item.id}));
// gridApi.applyTransaction({ remove: deleteRows });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:21:03