在排序的网格中获取 previous/next 行节点

Getting previous/next row node in a sorted grid

我有一个网格,其中默认排序在列上,我在通过添加或减去当前选定的行 ID 来获取 next/previous 行时遇到问题。

这是默认排序的列

{
  headerName: "Created",
  field: "createdOn",
  cellRenderer: (params) => {
    return WebModule.Utils.dateFormat(params.value);
  },
  sort: "desc",
  width: 125
},

这是我获取 previous/next 行的逻辑

class ResultModal {

    constructor(params) {
        this.params = params
        let rowIndex = params.rowIndex;
        this.previousRow = params.api.getRowNode(rowIndex - 1);
        this.nextRow = params.api.getRowNode(rowIndex + 1);
        this.result = params.data;
    }
}

我将整个 ag-grid params 对象传递给模态,这样我就可以从模态中的按钮导航网格记录。

问题是,如果我 运行 上面的逻辑选择了第二行,params.rowIndex 是 1,我得到 nextRow 和 (1+1) 但实际 rowIndex of nextRow 将类似于 2245(我在网格中有很多数据)。

所以我最终选择了隐藏在网格深处的一行,而不是实际显示的第 3 行。

当网格为 sorted/filtered 时,我是否需要使用 getRowNode 以外的其他东西?

一种可能的解决方案是使用

gridOptions.api.forEachNodeAfterFilterAndSort

它在显示行时对其进行迭代。请注意,回调传递了 RowNode 本身和网格中的行索引。

function forEachNodeAfterFilterAndSort(
    callback: (rowNode: RowNode, index: number) => void
): void;

https://www.ag-grid.com/javascript-data-grid/grid-api/#reference-rowNodes

我最终使用了 api.getDisplayedRowAtIndex()

let node = params.api.getSelectedNodes()[0];
let rowIndex = node.rowIndex;
this.previousRow = params.api.getDisplayedRowAtIndex(rowIndex - 1);
this.nextRow = params.api.getDisplayedRowAtIndex(rowIndex + 1);

无论 sort/filter 选项如何,这确实会获取上一行和下一行。