react-bootstrap-table2
supports the row selection feature. By passing prop selectRow
to enable row selection. When you enable this feature, react-bootstrap-table2
will prepend a new selection column.
- selected
- style
- classes)
- bgColor
- nonSelectable)
- nonSelectableStyle
- nonSelectableClasses
- clickToSelect)
- clickToExpand)
- clickToEdit
- onSelect
- onSelectAll
- selectColumnPosition
- hideSelectColumn
- hideSelectAll
- selectionRenderer
- selectionHeaderRenderer
- headerColumnStyle
- selectColumnStyle
Specifying the selection way for single(radio)
or multiple(checkbox)
. If radio
was assigned, there will be a radio button in the selection column; otherwise, the checkbox
instead.
- radio
- checkbox
const selectRow = {
mode: 'radio' // single row selection
};
<BootstrapTable
keyField='id'
data={ products }
columns={ columns }
selectRow={ selectRowProp }
/>
const selectRow = {
mode: 'checkbox' // multiple row selection
};
<BootstrapTable
keyField='id'
data={ products }
columns={ columns }
selectRow={ selectRowProp }
/>
selectRow.selected
allow you have default selections on table.
const selectRow = {
mode: 'checkbox',
selected: [1, 3] // should be a row keys array
};
selectRow.style
allow you to have custom style on selected rows:
const selectRow = {
mode: 'checkbox',
style: { background: 'red' }
};
If you wanna more flexible customization, selectRow.style
also accept a function:
const selectRow = {
mode: 'checkbox',
style: (row, rowIndex) => { return ...; }
};
selectRow.classes
allow you to add css class on selected rows:
const selectRow = {
mode: 'checkbox',
classes: 'custom-class'
};
If you wanna more flexible customization, selectRow.classes
also accept a function:
const selectRow = {
mode: 'checkbox',
classes: (row, rowIndex) => { return ...; }
};
The background color when row is selected
const selectRow = {
mode: 'checkbox',
bgColor: 'red'
};
There's also a more good way to custom it:
const selectRow = {
mode: 'checkbox',
bgColor: (row, rowIndex) => {
return ....; // return a color code
}
};
This prop allow you to restrict some rows which can not be selected by user. selectRow.nonSelectable
accept an rowkeys array.
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5]
};
This prop allow you to customize the non selectable rows. selectRow.nonSelectableStyle
accepts an style object
and a callback function for more flexible customization.
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableStyle: { backgroundColor: 'gray' }
};
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableStyle: (row, rowIndex) => { return ...; }
};
This prop allow you to set a custom class for the non selectable rows, or use a callback function for more flexible customization
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableClasses: 'my-class'
};
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableClasses: (row, rowIndex) => { return ...; }
};
Allow user to select row by clicking on the row.
const selectRow = {
mode: 'checkbox',
clickToSelect: true
};
Note: When you also enable cellEdit, the
selectRow.clickToSelect
will deactivate the functionality of cell editing If you want to click on row to select row and edit cell simultaneously, you are suppose to enableselectRow.clickToEdit
Default is false, enable it will let user able to expand and select row when user clicking on the row.
const selectRow = {
mode: 'checkbox',
clickToExpand: true
};
Able to click to edit cell and select row
const selectRow = {
mode: 'checkbox',
clickToSelect: true
clickToEdit: true
};
Provide a callback function which allow you to custom the checkbox/radio box. This callback only have one argument which is an object and contain following properties:
const selectRow = {
mode: 'checkbox',
selectionRenderer: ({ mode, checked, disabled, rowIndex }) => (
// ....
)
};
By default,
react-bootstrap-table2
will help you to handle the click event, it's not necessary to handle again by developer.
Provide a callback function which allow you to custom the checkbox/radio box in the selection header column. This callback only have one argument which is an object and contain following properties:
const selectRow = {
mode: 'checkbox',
selectionHeaderRenderer: ({ mode, checked, indeterminate }) => (
// ....
)
};
By default,
react-bootstrap-table2
will help you to handle the click event, it's not necessary to handle again by developer.
A way to custome the selection header cell. headerColumnStyle
not only accept a simple style object but also a callback function for more flexible customization:
const selectRow = {
mode: 'checkbox',
headerColumnStyle: { backgroundColor: 'blue' }
};
const selectRow = {
mode: 'checkbox',
headerColumnStyle: (status) => (
// status available value is checked, indeterminate and unchecked
return { backgroundColor: 'blue' };
)
};
A way to custome the selection cell. selectColumnStyle
not only accept a simple style object but also a callback function for more flexible customization:
const selectRow = {
mode: 'checkbox',
selectColumnStyle: { backgroundColor: 'blue' }
};
If a callback function present, you can get below information to custom the selection cell:
checked
: Whether current row is seleccted or notdisabled
: Whether current row is disabled or notrowIndex
: Current row indexrowKey
: Current row key
const selectRow = {
mode: 'checkbox',
selectColumnStyle: ({
checked,
disabled,
rowIndex,
rowKey
}) => (
// ....
return { backgroundColor: 'blue' };
)
};
This callback function will be called when a row is select/unselect and pass following three arguments:
row
, isSelect
, rowIndex
and e
.
const selectRow = {
mode: 'checkbox',
onSelect: (row, isSelect, rowIndex, e) => {
// ...
}
};
If you want to reject current select action, just return
false
:
const selectRow = {
mode: 'checkbox',
onSelect: (row, isSelect, rowIndex, e) => {
if (SOME_CONDITION) {
return false;
}
}
};
This callback function will be called when select/unselect all and it only work when you configure selectRow.mode
as checkbox
.
const selectRow = {
mode: 'checkbox',
onSelectAll: (isSelect, rows, e) => {
// ...
}
};
If you want to control the final selection result, just return a row key array:
const selectRow = {
mode: 'checkbox',
onSelectAll: (isSelect, rows, e) => {
if (isSelect && SOME_CONDITION) {
return [1, 3, 4]; // finally, key 1, 3, 4 will being selected
}
}
};
Default is left
. You can give this as right
for rendering selection column in the right side.
const selectRow = {
mode: 'checkbox',
selectColumnPosition: 'right'
};
Default is false
, if you don't want to have a selection column, give this prop as true
const selectRow = {
mode: 'radio',
hideSelectColumn: true,
clickToSelect: true,
bgColor: 'red'
};
Default is false
, if you don't want to render the select all checkbox on the header of selection column, give this prop as true
!
const selectRow = {
mode: 'checkbox',
hideSelectAll: true
};