以编程方式选择和取消选择ag-grid中的行

问题描述 投票:0回答:2

我根据某些条件选择和取消选择 ag-grid 中的某些行。我在 onRowDataChanged 事件中执行此操作,该事件将在加载网格并填充行数据后调用。当我尝试在 onGridReady 事件中实现此目的时,它会在填充行数据之前调用。所以,我在 onRowDataChanged 事件中这样做了。

这是我对 gridOptions 的实现。

ngOnInit() {
  this.gridOptions = <any> {
    rowSelection: 'multiple',
    onRowSelected: event => {
      // save selected rows in an array for additional work.
    },
    onRowDataChanged: event => {
      if (selectRows) {
         this.gridApi.selectAll();
      } else {
        this.gridApi.deSelectAll();
      }
    }
    onGridReady: params => {
      params.api.sizeColumnsToFit();
    }
  }
}

根据条件正确选择和取消选择行。 如果我还想选择或取消选择某些行,我可以使用以下代码:

this.gridApi.getRowNode(index).setSelected(true);
this.gridApi.getRowNode(index).setSelected(false);

但是,我在以编程方式选择和取消选择行时遇到一个问题。 在 this.gridApi.selectAll(); 之后执行并且网格行全部被选中, onRowSelected 事件被触发。当该事件被触发时我正在执行的代码针对每行选择和取消选择执行。

仅当用户选择或取消选择复选框时才应触发 onRowSelection 事件。我将选定的行保存在数组中以发送到服务器。

但是,当我在 onRowDataChanged 期间以编程方式选择或取消选择行时,onRowSelection 也会被触发。这将导致该事件上的代码被执行多次,并且当我有超过 400 行时,会给我的性能带来影响。

如何以编程方式选择或取消选择 ag-grid 中的某些行而不多次触发 onRowSelected 事件?

typescript ag-grid
2个回答
0
投票

一种可能的方法是手动添加和删除事件监听器,以便在某些操作/场景中获得更多控制:

https://www.ag-grid.com/javascript-grid-row-node/

  • addEventListener(eventType: string,listener: Function):添加事件监听器。目前仅支持 rowSelected 事件。
  • removeEventListener(eventType: string,listener:Function) 删除事件监听器。

0
投票

从ag-grid React中取消选择选定的行。设置属性选择单一但rowMultiSelectWithClick = {true}

<AgGridReact
rowSelection={"single"}
rowMultiSelectWithClick={true}
© www.soinside.com 2019 - 2024. All rights reserved.