DataGrid

Data grids are used to organize lists of high density data.

Props#

Column meta props#

These properties are supported by the meta property on ColumnDef.

propertydescription
hrefSet to a string or function to render the cell value in an a
isNumericSet to true to right align the cell content
isTruncatedEnable or disabled truncated text in cells
headerPropsProps passed to header (Th) components
cellPropsProps passed to cell (Td) components
expanderPropsProps passed to the expander button

DataGrid props#

Accepts all Box properties.

PropTypeDefaultDescription
columnsrequiredColumnDef<Data, any>[]The array of column defs to use for the table.
datarequiredData[]The data for the table to display. This array should match the type you provided to `table.setRowType<...>`. Columns can access this data via string/index or a functional accessor. When the data option changes reference, the table will reprocess the data.
aggregationFnsRecord<string, AggregationFn<any>>
autoResetAllbooleanSet this option to override any of the `autoReset...` feature options.
autoResetExpandedbooleanEnable this setting to automatically reset the expanded state of the table when expanding state changes.
autoResetPageIndexbooleanIf set to true, pagination will be reset to the first page when page-altering state changes eg. data is updated, filters change, grouping changes, etc.
childrentype ONLY_FOR_FORMAT = | string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | PromiseLikeOfReactNodeDataGrid children
classNamestringThe table class name attribute
columnResizeDirectionColumnResizeDirectionEnables or disables right-to-left support for resizing the column. defaults to 'ltr'.
columnResizeModeColumnResizeModeDetermines when the columnSizing state is updated. onChange updates the state when the user is dragging the resize handle. onEnd updates the state when the user releases the resize handle.
columnVirtualizerOptionsVirtualizerOptions< HTMLDivElement, HTMLTableRowElement > & { enabled?: boolean | undefined }React Virtual options for the column virtualizer
debugAllbooleanSet this option to true to output all debugging information to the console.
debugCellsbooleanSet this option to true to output cell debugging information to the console.
debugColumnsbooleanSet this option to true to output column debugging information to the console.
debugHeadersbooleanSet this option to true to output header debugging information to the console.
debugRowsbooleanSet this option to true to output row debugging information to the console.
debugTablebooleanSet this option to true to output table debugging information to the console.
defaultColumnPartial<ColumnDef<Data, unknown>>Default column options to use for all column defs supplied to the table.
emptyStateFC<any>Empty state component, rendered when there is no data and no filters enabled.
enableColumnFiltersbooleanEnables/disables **column** filtering for all columns.
enableColumnPinningbooleanEnables/disables column pinning for the table. Defaults to true.
enableColumnResizingbooleanEnables or disables column resizing for the column.
enableExpandingbooleanEnable/disable expanding for all rows.
enableFiltersbooleanEnables/disables all filtering for the table.
enableGlobalFilterbooleanEnables/disables **global** filtering for all columns.
enableGroupingbooleanEnables/disables grouping for the table.
enableHidingboolean
enableMultiRemovebooleanEnables/disables the ability to remove multi-sorts
enableMultiRowSelectionboolean | ((row: Row<Data>) => boolean)- Enables/disables multiple row selection for all rows in the table OR - A function that given a row, returns whether to enable/disable multiple row selection for that row's children/grandchildren
enableMultiSortbooleanEnables/Disables multi-sorting for the table.
enablePinningbooleanEnables/disables all pinning for the table. Defaults to true.
enableRowPinningboolean | ((row: Row<Data>) => boolean)Enables/disables row pinning for the table. Defaults to true.
enableRowSelectionboolean | ((row: Row<Data>) => boolean)- Enables/disables row selection for all rows in the table OR - A function that given a row, returns whether to enable/disable row selection for that row
enableSortingbooleanEnables/Disables sorting for the table.
enableSortingRemovalbooleanEnables/Disables the ability to remove sorting for the table. - If true then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'none' -> ... - If false then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'desc' -> 'asc' -> ...
enableSubRowSelectionboolean | ((row: Row<Data>) => boolean)Enables/disables automatic sub-row selection when a parent row is selected, or a function that enables/disables automatic sub-row selection for each row. (Use in combination with expanding or grouping features)
filterFnsRecord<string, FilterFn<any>>
filterFromLeafRowsbooleanBy default, filtering is done from parent rows down (so if a parent row is filtered out, all of its children will be filtered out as well). Setting this option to true will cause filtering to be done from leaf rows up (which means parent rows will be included so long as one of their child or grand-child rows is also included).
getColumnCanGlobalFilter(column: Column<Data, unknown>) => booleanIf provided, this function will be called with the column and should return true or false to indicate whether this column should be used for global filtering. This is useful if the column can contain data that is not string or number (i.e. undefined).
getExpandedRowModel(table: Table<any>) => () => RowModel<any>This function is responsible for returning the expanded row model. If this function is not provided, the table will not expand rows. You can use the default exported getExpandedRowModel function to get the expanded row model or implement your own.
getFacetedMinMaxValues( table: Table<Data>, columnId: string, ) => () => [number, number] | undefined
getFacetedRowModel( table: Table<Data>, columnId: string, ) => () => RowModel<Data>
getFacetedUniqueValues( table: Table<Data>, columnId: string, ) => () => Map<any, number>
getFilteredRowModel(table: Table<any>) => () => RowModel<any>If provided, this function is called **once** per table and should return a **new function** which will calculate and return the row model for the table when it's filtered. - For server-side filtering, this function is unnecessary and can be ignored since the server should already return the filtered row model. - For client-side filtering, this function is required. A default implementation is provided via any table adapter's `{ getFilteredRowModel }` export.
getGroupedRowModel(table: Table<any>) => () => RowModel<any>Returns the row model after grouping has taken place, but no further.
getIsRowExpanded(row: Row<Data>) => booleanIf provided, allows you to override the default behavior of determining whether a row is currently expanded.
getPaginationRowModel(table: Table<any>) => () => RowModel<any>Returns the row model after pagination has taken place, but no further. Pagination columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.
getRowCanExpand(row: Row<Data>) => booleanIf provided, allows you to override the default behavior of determining whether a row can be expanded.
getRowId( originalRow: Data, index: number, parent?: Row<Data> | undefined, ) => stringThis optional function is used to derive a unique ID for any given row. If not provided the rows index is used (nested rows join together with `.` using their grandparents' index eg. `index.index.index`). If you need to identify individual rows that are originating from any server-side operations, it's suggested you use this function to return an ID that makes sense regardless of network IO/ambiguity eg. a userId, taskId, database ID field, etc.
getSortedRowModel(table: Table<any>) => () => RowModel<any>This function is used to retrieve the sorted row model. If using server-side sorting, this function is not required. To use client-side sorting, pass the exported `getSortedRowModel()` from your adapter to your table or implement your own.
getSubRows(originalRow: Data, index: number) => Data[] | undefinedThis optional function is used to access the sub rows for any given row. If you are using nested rows, you will need to use this function to return the sub rows object (or undefined) from the row.
globalFilterFnFilterFnOption<Data>The filter function to use for global filtering. - A string referencing a built-in filter function - A string that references a custom filter functions provided via the `tableOptions.filterFns` option - A custom filter function
groupedColumnModefalse | "reorder" | "remove"Grouping columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.
iconsDataGridIconsCustom icons This prop is memoized and will not update after initial render.
initialStateInitialTableStateUse this option to optionally pass initial state to the table. This state will be used when resetting various table states either automatically by the table (eg. `options.autoResetPageIndex`) or via functions like `table.resetRowSelection()`. Most reset function allow you optionally pass a flag to reset to a blank/default state instead of the initial state. Table state will not be reset when this object changes, which also means that the initial state object does not need to be stable.
instanceReftype ONLY_FOR_FORMAT = | ((instance: Table<Data> | null) => void) | RefObject<Table<Data>>The React Table instance reference
isExpandablebooleanEnable expandable rows
isHoverablebooleanEnable row hover styles
isMultiSortEvent(e: unknown) => booleanPass a custom function that will be used to determine if a multi-sort event should be triggered. It is passed the event from the sort toggle handler and should return true if the event should trigger a multi-sort.
isSelectablebooleanEnable row selection
isSortablebooleanEnable sorting on all columns
keepPinnedRowsbooleanWhen false, pinned rows will not be visible if they are filtered or paginated out of the table. When true, pinned rows will always be visible regardless of filtering or pagination. Defaults to true.
manualExpandingbooleanEnables manual row expansion. If this is set to true, getExpandedRowModel will not be used to expand rows and you would be expected to perform the expansion in your own data model. This is useful if you are doing server-side expansion.
manualFilteringbooleanDisables the getFilteredRowModel from being used to filter data. This may be useful if your table needs to dynamically support both client-side and server-side filtering.
manualGroupingbooleanEnables manual grouping. If this option is set to true, the table will not automatically group rows using `getGroupedRowModel()` and instead will expect you to manually group the rows before passing them to the table. This is useful if you are doing server-side grouping and aggregation.
manualPaginationbooleanEnables manual pagination. If this option is set to true, the table will not automatically paginate rows using `getPaginationRowModel()` and instead will expect you to manually paginate the rows before passing them to the table. This is useful if you are doing server-side pagination and aggregation.
manualSortingbooleanEnables manual sorting for the table. If this is true, you will be expected to sort your data before it is passed to the table. This is useful if you are doing server-side sorting.
maxLeafRowFilterDepthnumberBy default, filtering is done for all rows (max depth of 100), no matter if they are root level parent rows or the child leaf rows of a parent row. Setting this option to 0 will cause filtering to only be applied to the root level parent rows, with all sub-rows remaining unfiltered. Similarly, setting this option to 1 will cause filtering to only be applied to child leaf rows 1 level deep, and so on. This is useful for situations where you want a row's entire child hierarchy to be visible regardless of the applied filter.
maxMultiSortColCountnumberSet a maximum number of columns that can be multi-sorted.
mergeOptions( defaultOptions: TableOptions<Data>, options: Partial<TableOptions<Data>>, ) => TableOptions<Data>This option is used to optionally implement the merging of table options.
metaTableMeta<Data>You can pass any object to `options.meta` and access it anywhere the table is available via `table.options.meta`.
noResultsFC<any>No results component, rendered when filters are enabled and there are no results.
onColumnFiltersChangeOnChangeFn<ColumnFiltersState>If provided, this function will be called with an updaterFn when `state.columnFilters` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
onColumnOrderChangeOnChangeFn<ColumnOrderState>If provided, this function will be called with an updaterFn when `state.columnOrder` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
onColumnPinningChangeOnChangeFn<ColumnPinningState>If provided, this function will be called with an updaterFn when `state.columnPinning` changes. This overrides the default internal state management, so you will also need to supply `state.columnPinning` from your own managed state.
onColumnSizingChangeOnChangeFn<ColumnSizingState>If provided, this function will be called with an updaterFn when `state.columnSizing` changes. This overrides the default internal state management, so you will also need to supply `state.columnSizing` from your own managed state.
onColumnSizingInfoChangeOnChangeFn<ColumnSizingInfoState>If provided, this function will be called with an updaterFn when `state.columnSizingInfo` changes. This overrides the default internal state management, so you will also need to supply `state.columnSizingInfo` from your own managed state.
onColumnVisibilityChangeOnChangeFn<VisibilityState>If provided, this function will be called with an updaterFn when `state.columnVisibility` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
onExpandedChangeOnChangeFn<ExpandedState>This function is called when the expanded table state changes. If a function is provided, you will be responsible for managing this state on your own. To pass the managed state back to the table, use the `tableOptions.state.expanded` option.
onGlobalFilterChangeOnChangeFn<any>If provided, this function will be called with an updaterFn when `state.globalFilter` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
onGroupingChangeOnChangeFn<GroupingState>If this function is provided, it will be called when the grouping state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.grouping` option.
onPaginationChangeOnChangeFn<PaginationState>If this function is provided, it will be called when the pagination state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.pagination` option.
onResetFilters() => voidCallback fired when clear filters is clicked.
onRowClick( row: Row<Data>, e: MouseEvent<Element, MouseEvent>, meta?: any, ) => voidCallback fired when a row is clicked.
onRowPinningChangeOnChangeFn<RowPinningState>If provided, this function will be called with an updaterFn when `state.rowPinning` changes. This overrides the default internal state management, so you will also need to supply `state.rowPinning` from your own managed state.
onRowSelectionChangeOnChangeFn<RowSelectionState>If provided, this function will be called with an updaterFn when `state.rowSelection` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
onScrollUIEventHandler<HTMLDivElement>Callback fired when the grid is scrolled.
onSelectedRowsChange(rows: string[]) => voidTriggers whenever the row selection changes.
onSortChange(columns: ColumnSort[]) => voidTriggers when sort changed. Use incombination with manualSortBy to enable remote sorting.
onSortingChangeOnChangeFn<SortingState>If provided, this function will be called with an updaterFn when `state.sorting` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.
onStateChange(updater: Updater<TableState>) => voidThe onStateChange option can be used to optionally listen to state changes within the table.
pageCountnumberUse this for controlled pagination.
paginateExpandedRowsbooleanIf true expanded rows will be paginated along with the rest of the table (which means expanded rows may span multiple pages). If false expanded rows will not be considered for pagination (which means expanded rows will always render on their parents page. This also means more rows will be rendered than the set page size)
renderFallbackValueanyValue used when the desired value is not found in the data.
rowVirtualizerOptionsVirtualizerOptions< HTMLDivElement, HTMLTableRowElement > & { enabled?: boolean | undefined }React Virtual options for the row virtualizer
slotProps{ container?: BoxProps | ((params: { table: Table<Data> }) => BoxProps) | undefined; inner?: BoxProps | ((params: { table: Table<Data>; }) => BoxProps) | undefined; table?: TableProps | ... 1 more ... | undefined; row?: TableRowProps | ... 1 more ... | undefined; cell?: TableCellProps | ... 1 more ... | undefined; }Pass custom properties to child (slots) components.
sortDescFirstbooleanIf true, all sorts will default to descending as their first toggle state.
sortingFnsRecord<string, SortingFn<any>>
statePartial<TableState>The state option can be used to optionally _control_ part or all of the table state. The state you pass here will merge with and overwrite the internal automatically-managed state to produce the final state for the table. You can also listen to state changes via the onStateChange option. > Note: Any state passed in here will override both the internal state and any other initialState you provide.
stickyHeaderbooleantrueSet to false to disable sticky headers
sxSystemStyleObjectGrid styles
virtualizerPropsVirtualizerOptions<HTMLDivElement, HTMLTableRowElement>React Virtual props

DataGridPagination props#

Accepts Box properties.

PropTypeDefaultDescription
onChange(props: { pageIndex: number pageSize: number }) => void

Was this helpful?