在数据源中获取行的索引

时间:2019-09-16 17:40:08

标签: ag-grid

在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
}

1 个答案:

答案 0 :(得分:0)

一种解决此问题的好方法是在每个元素上插入唯一的标识符,这将导致数据集之间的牢固联系。

由于您说不可能,因此可以使用ag-grid生成的ID,该ID也可以用作数据索引。

  

ag-grid documentation说:

     
    

获取rowNode的最简单方法是通过其ID。 ID是     由您使用网格回调getRowNodeId()提供或生成     通过网格使用内部序列。

  

因此,在您的情况下,一种解决方案是使用getDisplayedRowAtIndex方法。在第二个示例中,对数据进行排序后,您可以执行以下操作:

this.gridApi.getDisplayedRowAtIndex(0).id
// where 0 is your rowIndex

,这将导致您期望的值3。基本上,对于您访问的每个节点,它都将具有id属性,它将用作原始数组的索引。
根据您的应用程序,您还可以使用文档描述的forEachNode方法:

  

遍历网格中的每个节点(行)并调用回调   对于每个节点。此工作方式类似于   Javascript数组。每个节点都会调用此方法,而忽略任何节点   在网格内应用的过滤或排序。如果使用无限行   模型,然后为页面缓存中加载的每个页面调用。