如何在Ag-Grid中以编程方式选择多行?

时间:2019-10-10 16:06:51

标签: angular typescript ag-grid ag-grid-angular

我有一个存储在tempSelected中的行ID数组,我想以编程方式将列表中的每一行设置为selected。这就是我正在尝试的:

let len = tempSelected.length;
this.gridApi.forEachNode(function (node) {
  for(let i=0; i<len; i++){
    if(node.id === tempSelected[i]){
      node.setSelected(true);
    }
  }
});

在此循环结束时,我希望选择tempSelected中的每一行,但是现在,只有tempSelected数组中的最后一个id被选中,其余的未被选中。 / p>

我已经设置了rowSelection = 'multiple',所以它不应仅限于1个选择。我还尝试根据我读到的here on ag-grid's websitenode.setSelected(true);更改为node.setSelected(true, false);,但这并没有改变结果。

如何一次选择多个节点?

1 个答案:

答案 0 :(得分:1)

我猜测是因为您处理了ngOnInit生命周期挂钩或ag-grid的gridReady事件上的行突出显示。这两个事件都不适合,因为初始化完成后会触发ngOnInit钩子,而当网格本身准备就绪(但尚未渲染数据)时就会触发gridReady

因此,为了安全起见,并假设要处理加载时的突出显示,应改用firstDataRendered事件。

对于您的情况,可以将firstDataRendered事件绑定到某种方法,例如onFirstDataRendered。另外,请确保将rowSelection绑定到multiple以允许多个选择。

<ag-grid-angular
  (firstDataRendered)="onFirstDataRendered($event)"
  [rowSelection]="'multiple'"

  // other events and props
></ag-grid-angular>

在您的component.ts上,

onFirstDataRendered(params) {
  let len = tempSelected.length;
  this.gridApi.forEachNode(node => {
    for (let i=0; i<len; i++) {
      if(node.id === tempSelected[i]){
        node.setSelected(true);
      }
    }
  });
}

我已经在here上创建了一个演示。