我根据某些条件选择和取消选择 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 事件?
一种可能的方法是手动添加和删除事件监听器,以便在某些操作/场景中获得更多控制:
https://www.ag-grid.com/javascript-grid-row-node/
从ag-grid React中取消选择选定的行。设置属性选择单一但rowMultiSelectWithClick = {true}
<AgGridReact
rowSelection={"single"}
rowMultiSelectWithClick={true}