在ag-grid中,我如何从数据数组而不是.rowIndex
属性中检索行的索引,因为在应用排序和过滤时rowIndex
属性会发生变化。数据结构没有标识符,因此在迭代数据时无法找到ID。 (请参见下面的Mike Smith示例)。按照下面的示例,当应用排序时,如何获得“原始索引”属性?
我需要能够像node.index
而不是node.rowIndex
那样做某事。
// Data I provide ag-grid
const unsortedData = [
{firstName: 'Mike', lastName: 'Smith'}, // original index 0, rowIndex 0
{firstName: 'Steve', lastName: 'Jones'}, // original index 1, rowIndex 1
{firstName: 'Mike', lastName: 'Smith'}, // original index 2, rowIndex 2
{firstName: 'John', lastName: 'Johnson'} // original index 3, rowIndex 3
];
// Example of internally sorted data by ag-grid. IE `rowsAfterSort`.
const sortedData = [
{firstName: 'John', lastName: 'Johnson'}, // original index 3, rowIndex 0
{firstName: 'Mike', lastName: 'Smith'}, // original index 0, rowIndex 1
{firstName: 'Mike', lastName: 'Smith'}, // original index 2, rowIndex 2
{firstName: 'Steve', lastName: 'Jones'} // original index 1, rowIndex 3
];
// Callback function from ag-grid
function myAgGridCallback(params){
// var realIndex = params.node.rowIndex; //rowIndex changes when sorting is applied
// var realIndex = params.node.index; // I need something like this. index does not exist.
// Do stuff with realIndex
}
答案 0 :(得分:0)
一种解决此问题的好方法是在每个元素上插入唯一的标识符,这将导致数据集之间的牢固联系。
由于您说不可能,因此可以使用ag-grid生成的ID,该ID也可以用作数据索引。
获取rowNode的最简单方法是通过其ID。 ID是 由您使用网格回调getRowNodeId()提供或生成 通过网格使用内部序列。
因此,在您的情况下,一种解决方案是使用getDisplayedRowAtIndex
方法。在第二个示例中,对数据进行排序后,您可以执行以下操作:
this.gridApi.getDisplayedRowAtIndex(0).id
// where 0 is your rowIndex
,这将导致您期望的值3
。基本上,对于您访问的每个节点,它都将具有id
属性,它将用作原始数组的索引。
根据您的应用程序,您还可以使用文档描述的forEachNode
方法:
遍历网格中的每个节点(行)并调用回调 对于每个节点。此工作方式类似于 Javascript数组。每个节点都会调用此方法,而忽略任何节点 在网格内应用的过滤或排序。如果使用无限行 模型,然后为页面缓存中加载的每个页面调用。