多个 ag-grids - setSelected 为 true 仅适用于最后一个网格

Multiple ag-grids - setSelected to true is only working for the last grid

我在数组上有一个 for 循环并根据数组的内容创建 ag-grid。根据数据,我预选了 ag-gird 行,

gridReady 方法

  onGridReady(event) {
    this.resultsArray.forEach(result => {
      result.gridOption.api = event.api;
      result.gridOption.columnApi = event.columnApi;  
    });
      event.api.forEachNode((node) => {
      if (node.data?.selected) {
        node.setSelected(true);
      }
    });
  }

resultsArray 包含每个网格的数据和网格选项。 假设用户从两个网格中取消选择某些行,然后单击重置。它应该重置两个网格,但它只重置最后一个网格

重置方法

  onReset(){
      this.resultsArray.forEach(result => {     
      result.gridOption.api.forEachNode((node) => {
      if (node.data?.selected) {
        node.setSelected(true);
      }
    });
    });
  }

我的 stackblitz 演示 https://stackblitz.com/edit/angular-ag-grid-angular-mtpg6q?

关于如何重置每个网格的任何建议,而不仅仅是最后一个网格。

您正在覆盖 onGridReady 方法中的网格 API。两个 'results' 都会有最后一个的 API。

你要改:

gridReady 方法添加标识符 groupName 以了解您要设置哪个 API:

<!-- src/app/my-grid-application/my-grid-application.component.html -->
<div>
    <button (click)="onReset()">Reset</button>
</div>

<div *ngFor="let result of resultsArray; let resultIndex = index">
    <div>{{result.groupName}}</div>
    <ag-grid-angular #agGrid style="width: 80%; height: 80%;" class="ag-theme-fresh" [gridOptions]="result.gridOption"
        [defaultColDef]="defaultColDef" [columnDefs]="myColumnDefs" (gridReady)="onGridReady($event, result.groupName)"
        [rowSelection]="rowSelection" [rowData]="result.data" [rowMultiSelectWithClick]="true">
    </ag-grid-angular>
</div>

if 内添加检查:

onGridReady(event, groupName) {
    this.resultsArray.forEach(result => {
      if(result.groupName == groupName) {
        result.gridOption.api = event.api;
        result.gridOption.columnApi = event.columnApi;
        result.gridOption.api.sizeColumnsToFit(); 
      }
    });
      event.api.forEachNode((node) => {
      if (node.data?.selected) {
        node.setSelected(true);
      }
    });
  }

这是一个有效的 stackblitz 项目。