刷新 Ag Grid 并选择最后选择的行

refresh AgGrid and reselect last selected row

我正在尝试刷新 ag 网格并重新选择更新前的最后一行。

这是我的AG网格组件。

  onCellClicked = params => {console.log(params)
    let node = params.node;

    Promise.all([
      node.setSelected(true, true),
      this.props.actions.selectMarketingProspect(node.data),
      this.props.actions.getMarketingCustomerNotes(this.props.dealerID,node.data.id)
    ]);
  };

      <AgGridReact
          columnDefs={columnDefs}
          defaultColDef={{
            resizable: true,
            sortable: true
          }}
          rowSelection='single'
          getRowNodeId={data => data.id}
          deltaRowDataMode={true}
          frameworkComponents={frameworkComponents}
          rowClassRules={this.state.rowClassRules}
          detailCellRenderer={detailCellRenderer}
          onFirstDataRendered={this.onFirstDataRendered}
          onGridReady={this.onGridReady}
          onSelectionChanged={this.onSelectionChanged}
          onCellClicked={this.onCellClicked}
          sideBar={toolPanelOptions}
          onModelUpdated={this.onModelUpdated}
      />
    </div>

有什么想法吗?

根据我在文档中阅读的内容,我认为 node.setselected 应该可以解决问题,但我不能完全做到。任何帮助将不胜感激。

您可以通过监听 selection changed 事件来跟踪最后 selected RowNode ids:

const [selectedRowIds, setSelectedRowIds] = React.useState<string[]>([]);
<AgGridReact
  onSelectionChanged={(e) => {
    const selectedNodes = e.api.getSelectedNodes();
    if (selectedNodes.length === 0) return;

    const selectedRowIds = selectedNodes
      .map((n) => n.id)
      .filter(Boolean) as string[];

    setSelectedRowIds(selectedRowIds);
  }}
  {...}
/>

然后当你想再次select时,使用GridApi.getRowNode(id)得到你想要select的RowNode并调用RowNode.setSelected(true)到select它:

selectedRowIds.forEach((id) => {
  gridApi?.getRowNode(id)?.setSelected(true);
});