37

ag-grid provides a way to get selected rows using api.getSelectedRows() function. And provides a way to set all rows using api.setRowData([]) function. I'm looking for something getAllRows() to return all the rows in the grid. I know there is a way to loop through all the rows using api.forEachNode() etc. Is there any way I can get the entire array of rows?

Rajesh Pandya
  • 1,540
  • 4
  • 18
  • 31
Sandeep Kumar
  • 2,397
  • 5
  • 30
  • 37

8 Answers8

47

I don't think there is such a method but you can make your own:

getAllRows() {
  let rowData = [];
  this.gridApi.forEachNode(node => rowData.push(node.data));
  return rowData;
}
Michael Karén
  • 1,105
  • 9
  • 13
  • I am doing the same for now but, was wondering if ag-grip provides any inbuilt function for the same. Thanks for the advice though. – Sandeep Kumar Jun 07 '18 at 07:41
  • I have tried to find one so I'm at least 90% sure there is no such thing. The closest one I found is if you do api.getModel() that returns a InMemoryRowModel that has the property rowsToDisplay. – Michael Karén Jun 07 '18 at 13:16
  • OP already tried 'api.forEachNode()' (as mentioned in original question) and is expecting an inbuilt function/property which can return rows/count in grid – Mohammad Umair Khan Oct 26 '18 at 06:09
  • From the video link below, the array always keep updated and rendered to the DOM. Do not need to retrieve row data. https://youtu.be/_V5qFr62uhY – Peter Chen Feb 16 '23 at 02:49
  • How do you do this in React Hook (without using "this")? – Peter Chen Feb 23 '23 at 12:24
  • I don't think the above code will work if you have row groups. – Joseph King Apr 28 '23 at 10:53
13

you are looking for getRenderedNodes

gridOptions.api.getRenderedNodes()

Note: this will only retrieve the rendered rows. If you use row virtualization, meaning only the rows in the viewport will be in the DOM, only those will be returned. As per the functions docs:

Retrieve rendered nodes. Due to virtualisation this will contain only the current visible rows and those in the buffer.

Gabriel Petersson
  • 8,434
  • 4
  • 32
  • 41
Alaa Hliehel
  • 191
  • 1
  • 3
  • 10
  • not sure if there's a better answer out there, but this is the best answer on this thread by a country mile. thx. – mohsen Aug 26 '22 at 18:35
  • This is excellent and the best answer to the question above. Thanks for sharing your knowlegde with us! – omostan Sep 20 '22 at 13:18
  • This doesn't work if you have a tree-grid displaying the same node at multiple locations of the tree. – Yoann Maingon Oct 26 '22 at 08:59
6

Ag-grid doesn't provide any method to do that. You can check it here Accessing Data Ag-grid and here Grid Api.

I guest the reason is because you can do it through a loop, as you mentioned before.

    let items: Array<rows> = [];
    this.gridApi.forEachNode(function(node) { 
        items.push(node.data);
    });

Or if the source of your ag-grid is linked through angular there is no need to loop over the grid (assuming that the data grid has not pending changes)

Quethzel Diaz
  • 621
  • 1
  • 11
  • 26
6

I think this is the simplest answer.

let {rowsToDisplay} = params.api.getModel();

Steve Kim
  • 77
  • 1
  • 1
3

Update 2023-05-27: As comments on this answer have pointed out, the answer I gave originally is incorrect, especially for the latest version of AG Grid which doesn't even have gridOptionsWrapper.

Looping through api.forEachNode() and building a data array manually seems to be the best option.


This is how I get the rowData from the grid API:

api.getModel().gridOptionsWrapper.gridOptions.rowData

Lots of methods include gridOptionsWrapper in their return object, so you don't necessarily have to use getModel().

Jake Boone
  • 1,090
  • 1
  • 11
  • 19
  • 6
    In this case, you will get an initial value of rowData, but not an updated, for example, if some row was removed. – Nijat Amrastanov Feb 07 '20 at 12:40
  • The GridOptionsWrapper API [was removed](https://github.com/ag-grid/ag-grid/commit/53d6dd2135b898b07c2eb822e22b6ac3676428e6) for v29 in scope of the private issue *AG-7603 Delete GridOptionsWrapper* – cachius May 27 '23 at 18:00
0

It gives a list of all rows, even if you filter by any columns.

getAllRows() {
  let allRows = [];
  this.gridApi.forEachNodeAfterFilter((rowNode) => allRows.push(rowNode));
  return allRows;
}
Tarkeasy
  • 13
  • 3
0
  **`Try This:`**  

All the selected nodes can b edisplayed here

  const rowsToDisplay = api?.getRenderedNodes()?.map(node => node?.data)
Shahnad S
  • 983
  • 10
  • 17
-1

I was wondering the same thing and found it annoying that you cannot simply get all rows. In my case I needed to flip a flag on all rows, where the indicator is set outside the component containing the grid, so I did the following. This is in TypeScript for a React app.

  gridApi!.selectAll();
  const rows = gridApi!.getSelectedRows();

  rows.forEach(row => {
    row.coverageAction = this.props.isIndicatorChecked;
  });

  gridApi!.setRowData(rows);
David Spenard
  • 789
  • 7
  • 10