AG-GRID 只删除前 27 个节点

Posted

技术标签:

【中文标题】AG-GRID 只删除前 27 个节点【英文标题】:AG-GRID only deleting the first 27 nodes 【发布时间】:2021-11-04 16:07:13 【问题描述】:

我的网格中有大约 2500 行,其中大约 400 是选定的节点。 所以我遍历所有节点,如果它们的 ID 在这 400 条记录的 ID 中,我希望它们被删除。 所以我写了这个:

 allItems.forEach(node => 
     if(selectedItems.includes(node.data.id))
       node.setSelected(false);
   )

它可以工作,但一次只删除 27 行,而不是删除所有 400 行。所以我必须再点击一次按钮,它会删除接下来的 27 条记录等。

为什么会这样?如何更改它以一次删除所有这 400 行?

【问题讨论】:

请发布您的数据。 【参考方案1】:

您的示例代码非常有限。但是为什么不用网格内部的api来查询选中的节点呢?

this.gridApi.getSelectedNodes().forEach(node => 
  node.setSelected(false);
);

【讨论】:

谢谢,我也这样做了。奇怪的是,如果我说 getSelectedNodes 中有多少项,它确实返回正确的 400 个节点,但是当它想在它们上应用 setSelected 时,它仍然只适用于前 27 个节点左右! 我现在也证明了这一点。为了测试,我增加了网格的高度。因此,这一次无需向下滚动即可显示更多行。所以当我调用我的删除方法时,它删除了超过 20 个之前删除的内容。所以这意味着它必须对网格做一些优化,也许它会保留某种对用户可见的行的缓冲区。【参考方案2】:

试试这个:-

选择所有行并删除所有选定的行:-

  deletedAllSelectedRows() 
          this.gridApi.selectAll(); //select all rows
          const sel = this.gridApi.getSelectedRows();
          this.gridApi.applyTransaction(remove: sel);
      

注意:- applyTransaction 需要版本 23.1.0。对于较低 版本使用this.gridApi.updateRowData(remove: sel)

【讨论】:

以上是关于AG-GRID 只删除前 27 个节点的主要内容,如果未能解决你的问题,请参考以下文章

在指定元素前/后添加元素结点/只删除元素结点中的文本内容不会删除子节点(js/jQuery实现)

在O时间内删除链表节点(剑指offer_18.1)

数据结构介绍

27任务二十四——选中删除添加节点

当指向前一个节点的指针不可用时,从单个链表中删除中间节点

删除链表中的节点