An introduction to the key concepts of AG Grid.
Overview
In this tutorial you will:
- Create a basic grid
- Load external data into the grid
- Configure columns
- Configure grid features
- Format cell values
- Add custom components to cells
- Hook into grid events
Once complete, you'll have an interactive grid, with custom components and formatted data - Try it out for yourself by sorting, filtering, resizing, selecting, or editing data in the grid:
Create a Basic Grid
Complete our Quick Start (or open the example below in CodeSandbox / Plunker) to start with a basic grid, comprised of:
- Grid Options: An object which holds all of the options for the grid, such as Row Data & Column Definitions.
- Row Data: The data to be displayed.
- Column Definition: Defines & controls grid columns.
- Container: A div that contains and defines the grid's dimensions.
- Grid API: Provides access to Grid API methods. Initialised when creating a new grid.
Load New Data
The Grid API provides a way of interacting with the grid. To update the data within the grid, we can use the setGridOption
API. Let's test this by fetching some data and updating our grid with the response:
fetch('https://www.ag-grid.com/example-assets/space-mission-data.json')
.then(response => response.json())
.then((data: any) => gridApi.setGridOption('rowData', data))
Now that we're loading data from an external source, we can empty our rowData
array (which will allow the grid to display a loading spinner whilst the data is being fetched) and update our colDefs
to match the new dataset:
const gridOptions = {
rowData: [],
colDefs: [
{ field: "mission" },
{ field: "company" },
{ field: "location" },
{ field: "date" },
{ field: "price" },
{ field: "successful" },
{ field: "rocket" }
]
}
When we run our application, we should see a grid with ~1,400 rows of new data, and new column headers to match:
Note: There are a large number of APIs available. See our API Docs for an exhaustive list.
Configure Columns
Now that we have a basic grid with some arbitrary data, we can start to configure the grid with Column Properties.
Column Properties can be added to one or more columns to enable/disable column-specific features. Let's try this by adding the filter: true
property to the 'mission' column:
columnDefs: [
{ field: "mission", filter: true },
// ...
],
We should now be able to filter the 'mission' column - you can test this by filtering for the 'Apollo' missions:
Note: Column properties can be used to configure a wide-range of features; refer to our Column Properties page for a full list of features.
Default Column Definitions
The example above demonstrates how to configure a single column. To apply this configuration across all columns we can use Default Column Definitions instead. Let's make all of our columns filterable by adding the defaultColDef
property to our Grid Options object, and setting filter: true
:
const gridOptions = {
defaultColDef: {
filter: true
}
// ...
}
The grid should now allow filtering on all columns:
Note: Column Definitions take precedence over Default Column Definitions
Configure The Grid
So far we've covered creating a grid, updating the data within the grid, and configuring columns. This section introduces Grid Options, which control functionality that extends across both rows & columns, such as Pagination and Row Selection.
To use Grid Options, simply add the relevant property to the Grid Options object. Let's try this by adding pagination: true
to our Grid Options:
const gridOptions: GridOptions = {
pagination: true
// ...
}
We should now see Pagination has been enabled on the grid:
Refer to our detailed Grid Options documentation for a full list of options.
Format Cell Values
The data supplied to the grid usually requires some degree of formatting. For basic text formatting we can use Value Formatters.
Value Formatters are basic functions which take the value of the cell, apply some basic formatting, and return a new value to be displayed by the grid. Let's try this by adding the valueFormatter
property to our 'price' column and returning the formatted value:
columnDefs: [
{
field: "price",
// Return formatted value
valueFormatter: (params) => { return '£' + params.value.toLocaleString(); }
},
],
The grid should now show the formatted value in the 'price' column:
Note: Read our Value Formatter page for more information on formatting cell values
Custom Cell Components
Value Formatters are useful for basic formatting, but for more advanced use-cases we can use Cell Renderers instead.
Cell Renderers allow you add custom HTML & JS within cells. To use a Cell Renderer, set the cellRenderer
prop on a column, with the value as the name of your Cell Renderer.
Let's try this by creating a new component to display the company logo in the 'company' column:
class CompanyLogoRenderer {
eGui;
// Optional: Params for rendering. The same params that are passed to the cellRenderer function.
init(params) {
let companyLogo = document.createElement('img');
companyLogo.src = `https://www.ag-grid.com/example-assets/space-company-logos/${params.value.toLowerCase()}.png`
companyLogo.setAttribute('style', 'display: block; width: 25px; height: auto; max-height: 50%; margin-right: 12px; filter: brightness(1.1)');
let companyName = document.createElement('p');
companyName.textContent = params.value;
companyName.setAttribute('style', 'text-overflow: ellipsis; overflow: hidden; white-space: nowrap;');
this.eGui = document.createElement('span');
this.eGui.setAttribute('style', 'display: flex; height: 100%; width: 100%; align-items: center')
this.eGui.appendChild(companyLogo)
this.eGui.appendChild(companyName)
}
// Required: Return the DOM element of the component, this is what the grid puts into the cell
getGui() {
return this.eGui;
}
// Required: Get the cell to refresh.
refresh(params) {
return false
}
}
And then adding cellRenderer: CompanyLogoRenderer
to the 'company' column definition:
columnDefs: [
{
field: "company",
cellRenderer: CompanyLogoRenderer
},
// ...
],
Now, when we run the grid, we should see a company logo next to the name:
Note: Read our Cell Components page for more information on using custom components in cells
Handle Grid Events
In the last section of this tutorial we're going to hook into events raised by the grid using Grid Events.
To be notified of when an event is raised by the grid we need to add the relevant on[EventName]
property to our Grid Options, and provide a function to handle the event.
Let's try this out by enabling cell editing in our DefaultColDefs with editable: true
and hooking into the onCellValueChanged
event to log the new value to the console:
const gridOptions = {
// Configurations applied to all columns
defaultColDef: {
editable: true,
// ...
},
// Log new value when cell value changes
onCellValueChanged: (event) => {
console.log(`New Cell Value: ${event.value}`)
}
// ...
}
Now, when we click on a cell we should be able to edit it and see the new value logged to the console:
Refer to our Grid Events documentation for a full list of events raised by the grid
Test Your Knowledge
Let's put what you've learned so far into action by modifying the grid:
Enable filtering on all columns
Hint:
filter
is a Column Definition propertyEnable multiple row selection
Hint:
selection
is a Grid Option propertyLog a message to the console when a row selection is changed
Hint:
onSelectionChanged
is a Grid EventFormat the Date column using
.toLocaleDateString()
;Hint: Use a
valueFormatter
on the 'Date' column to format its valueAdd a Cell Renderer to display ticks and crosses in place of checkboxes on the 'Successful' column:
Hint: Use a
cellRenderer
on the 'successful' column
Once complete, your grid should look like the example below. If you're stuck, check out the source code to see how its done:
Summary
Congratulations! You've completed the tutorial and built your first grid. By now, you should be familiar with the key concepts of AG Grid:
Row Data: Your data, in JSON format, that you want the grid to display.
Column Definitions: Define your columns and control column-specific functionality, like sorting and filtering.
Default Column Definitions: Similar to Column Definitions, but applies configurations to all columns.
Grid Options: Configure functionality which extends across the entire grid.
Grid Events: Events raised by the grid, typically as a result of user interaction.
Value Formatters: Functions used for basic text formatting
Cell Renderers: Add your own components to cells
Next Steps
Browse our guides to dive into specific features of the grid: