Skip to content
+

Data Grid - Row selection

Row selection allows the user to select and highlight a single or multiple rows that they can then take action on.

Single row selection

Single row selection comes enabled by default for the MIT Data Grid component. You can select a row by clicking it, or using the keyboard shortcuts. To unselect a row, hold the Ctrl (Cmd on MacOS) key and click on it.

Press Enter to start editing

Multiple row selection

On the Data Grid Pro and Data Grid Premium components, you can select multiple rows in two ways:

  • To select multiple independent rows, hold the Ctrl (Cmd on MacOS) key while selecting rows.
  • To select a range of rows, hold the Shift key while selecting rows.
  • To disable multiple row selection, use disableMultipleRowSelection={true}.
Press Enter to start editing

Disable row selection on click

You might have interactive content in the cells and need to disable the selection of the row on click. Use the disableRowSelectionOnClick prop in this case.

Press Enter to start editing

Disable selection on certain rows

Use the isRowSelectable prop to indicate if a row can be selected. It's called with a GridRowParams object and should return a boolean value. If not specified, all rows are selectable.

In the demo below only rows with quantity above 50,000 can be selected:

Press Enter to start editing

Controlled row selection

Use the rowSelectionModel prop to control the selection. Each time this prop changes, the onRowSelectionModelChange callback is called with the new selection value.

Press Enter to start editing

Checkbox selection

To activate checkbox selection set checkboxSelection={true}.

Custom checkbox column

If you provide a custom checkbox column to the Data Grid with the GRID_CHECKBOX_SELECTION_FIELD field, the Data Grid will not add its own.

We strongly recommend to use the GRID_CHECKBOX_SELECTION_COL_DEF variable instead of re-defining all the custom properties yourself.

In the following demo, the checkbox column has been moved to the right and its width has been increased to 100px.

Press Enter to start editing

Customize indeterminate checkbox behavior

The parent checkboxes (like "Select All" checkbox) when clicked in an indeterminate state will deselect the selected rows. You can customize this behavior by using the indeterminateCheckboxAction prop.

Press Enter to start editing

Visible rows selection

By default, when you click the "Select All" checkbox, all rows in the Data Grid are selected. If you want to change this behavior and only select the rows that are currently visible on the page, you can use the checkboxSelectionVisibleOnly prop.

Usage with server-side pagination

Using the controlled selection with paginationMode="server" may result in selected rows being lost when the page is changed. This happens because the Data Grid cross-checks with the rows prop and only calls onRowSelectionModelChange with existing row IDs. Depending on your server-side implementation, when the page changes and the new value for the rows prop does not include previously selected rows, the Data Grid will call onRowSelectionModelChange with an empty value. To prevent this, enable the keepNonExistentRowsSelected prop to keep the rows selected even if they do not exist.

<DataGrid keepNonExistentRowsSelected />

By using this approach, clicking in the Select All checkbox may still leave some rows selected. It is up to you to clean the selection model, using the rowSelectionModel prop. The following demo shows the prop in action:

apiRef

The grid exposes a set of methods that enables all of these features using the imperative apiRef. To know more about how to use it, check the API Object section.

Signature:
getSelectedRows: () => Map<GridRowId, GridRowModel>
Signature:
isRowSelectable: (id: GridRowId) => boolean
Signature:
isRowSelected: (id: GridRowId) => boolean
Signature:
selectRow: (id: GridRowId, isSelected?: boolean, resetSelection?: boolean) => void
Signature:
setRowSelectionModel: (rowIds: readonly GridRowId[]) => void
Signature:
selectRowRange: (range: { startId: GridRowId; endId: GridRowId }, isSelected?: boolean, resetSelection?: boolean) => void
Signature:
selectRows: (ids: GridRowId[], isSelected?: boolean, resetSelection?: boolean) => void