我有一个在列上排序的默认网格,我有问题通过添加或减去当前选择的行ID来获得下一行/前一行。
下面是默认排序
的列{
headerName: "Created",
field: "createdOn",
cellRenderer: (params) => {
return WebModule.Utils.dateFormat(params.value);
},
sort: "desc",
width: 125
},
这是我获取前一行/下一行的逻辑
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),但nextRow
的实际rowIndex
将类似于2245(我在网格中有很多数据)。
所以我最终选择了网格深处的一行,而不是实际显示的第三行。
当网格被排序/过滤时,我需要使用getRowNode
以外的东西吗?
我最终使用了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);
无论排序/筛选选项如何,这都将获得前一行和下一行。
一个可能的解决方案是使用
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