已排序ag-grid如何正确获取当前行的上一行/下一行节点?
问题原因
ag-grid 中getRowNode()方法接收的参数是行节点的唯一标识ID,而非当前表格经过排序、筛选后的显示顺序索引。你拿到的params.rowIndex是行在原始未处理数据集中的索引,表格排序后显示顺序和原始数据顺序不一致,直接对原始索引加减后查询就会拿到不相关的行。
解决方案
你可以使用ag-grid提供的getRenderedNodes()方法获取当前表格按显示顺序排列的所有行节点数组,通过定位当前行在该数组中的下标来获取相邻行,示例代码如下:
class ResultModal { constructor(params) { this.params = params; // 获取当前表格按显示顺序排列的所有行节点 const renderedRows = params.api.getRenderedNodes(); // 找到当前行在渲染数组中的下标,如果未配置自定义rowId,可替换为node.data.你的行唯一字段 === params.data.你的行唯一字段匹配 const currentDisplayIndex = renderedRows.findIndex(node => node.id === params.node.id); // 边界判断后获取上下行,避免下标越界报错 this.previousRow = currentDisplayIndex > 0 ? renderedRows[currentDisplayIndex - 1] : null; this.nextRow = currentDisplayIndex < renderedRows.length - 1 ? renderedRows[currentDisplayIndex + 1] : null; this.result = params.data; } }
注意事项
- 如果你的表格开启了分页,
getRenderedNodes()只会返回当前分页的行节点,刚好符合你获取当前页面相邻展示行的需求 - 如果需要获取全局排序后的全量相邻行(跨分页),可以使用
api.forEachNodeAfterFilterAndSort()方法遍历全量处理后的行节点,自行构建顺序数组后再做查询
内容的提问来源于stack exchange,提问作者Francis Ducharme
相关产品推荐
相关产品推荐

