Skip to main content

API Reference

As you may have already noticed in the Filters tutorial, the grid exposes a rich API that allows you to control the grid's behavior and appearance. This API is available through the apiRef object that is available via the event bus. There is an event bus property on the GridOptions object that you can use to access the apiRef object.

const apiRef = useRef<ApiContext | null>(null);

style={{ height: "400px", width: "100%" }}
dataProvider: Employee.getAllEmployees(),
uniqueIdentifierOptions: {
useField: "employeeId",
eventBus: {
onApiContextReady: (ctx) => {
apiRef.current = ctx;

Please note, the onApiContextReady is called every time the grid is rebuilt. This means that you should not call something onApiContextReady that will cause the grid to rebuild. For example, if you reset the data provider in onApiContextReady, you will get an infinite loop. This includes resizing the grid. The most often times we have seen this happen is when customers do something in the callback that changes the grid's height. This causes a grid to rebuild and the onApiContextReady to be called again.

Accessing the API

The ApiContext has two properties: api and context. The api property is an object that contains all of the API methods. The context property is an object that contains all of the context properties. The documentation for the API methods and context properties can be found in the Event Bus and Grid Context section of the documentation.

API Methods

Lets take a look at some of the API methods that are available. The following example shows how to use the setFilterValue method to set a filter on the firstName column, and the clearFilterValue method to clear the filter on the firstName column. The clearAllFilterValues method clears all filters.

Live Editor
See it in action

You can copy the code above and run it here


All the built in filters use the api methods to set and clear the filter values. You can look at what the built in filters are doing here. Note how little code there is! This enables you to create your own custom filters with very little code. Examples here: Filter Options and in the tutorial's Filter section.

Column Menu Api Operations

All the operations in the column menu and the context menu are available as API methods. For example, here is the code from the Column Menu that uses the API methods to perform the operations in the column menu.

const menuItems = [
opts.horizontalScroll !== HorizontalScrollMode.Off ? [
lockMode !== LockMode.Left ? { label: LABELS.LOCK_LEFT, className: "lock-left-icon", onClick: () => setLockMode(LockMode.Left) } : undefined,
lockMode !== LockMode.Right ? { label: LABELS.LOCK_RIGHT, className: "lock-right-icon", onClick: () => setLockMode(LockMode.Right) } : undefined,
lockMode !== LockMode.None && lockMode ? { label: LABELS.REMOVE_LOCK, className: "unlock-icon", onClick: () => setLockMode(LockMode.None) } : undefined,
{ label: LABELS.UNLOCK_ALL, className: "unlock-icon", onClick: api.unlockAllColumns },
{ label: LABELS.HIDE_COL, className: "hide-col-icon", onClick: () => api.showHideColumn(getColId(), false) }, null] : undefined,

getCol()?.enableSort !== false ? [
{ label: LABELS.SORT_ASCENDING, className: "sort-ascending-icon", onClick: (e: MouseEvent<HTMLAnchorElement>) => sortColumn(e, true) },
{ label: LABELS.SORT_DESCENDING, className: "sort-descending-icon", onClick: (e: MouseEvent<HTMLAnchorElement>) => sortColumn(e, false) },
getColId() && api.getSort(getColId()) ? { label: LABELS.REMOVE_SORT, className: "sort-none-icon", onClick: () => getColId() && api.clearSort(getColId()) } : undefined,
{ label: LABELS.REMOVE_ALL_SORTS, className: "sort-none-icon", onClick: api.clearAllSorts }
, null] : undefined,
opts.enableFilters !== false && api.hasBehavior(Behaviors.FilterBehavior) ? [
{ label: LABELS.RUN_FILTER, className: "run-filter-icon", onClick: api.rebuild },
getColId() && api.getFilterValue(getColId()) !== undefined ? { label: LABELS.CLEAR_FILTER, className: "clear-filter-icon", onClick: () => getColId() && api.clearFilterValue(getColId()) } : undefined,
{ label: LABELS.CLEAR_ALL_FILTERS, className: "clear-filter-icon", onClick: api.clearAllFilterValues }
, null] : undefined,

{ label: LABELS.FIT_TO_CONTENT, className: "fit-width-icon", onClick: () => (getCol()) && api.autoFitColumns([getCol()!]) },

The code above shows you how to lock columns, sort columns, clear sorts, clear filters, and more.

Context Menu Api Operations

Similar to the column menu, all the operations in the context menu are available as API methods. For example, here is the code from the Context Menu that uses the API methods to perform the operations in the context menu.

const contextMenuItems: (ContextMenuItem | null)[] = [
className: "copy-cell-icon",
onClick: api.copyCell,
{ className: "copy-row-icon", label: LABELS.COPY_ROW, onClick: api.copyRow },
className: "copy-column-icon",
onClick: api.copyColumn,
className: "copy-table-icon",
onClick: api.copyAll,
className: "copy-cell-icon",
onClick: api.copySelectedCells,
className: "copy-row-icon",
onClick: api.copySelectedRows,

The code above shows you how to copy cells, copy rows, copy columns, and more.

For a full list of the API methods, see the API Reference.

There are numerous examples of using the API methods in the React DataGrid Examples.

Here are a few examples of commonly used API methods: