Columns Props
Definition of columns props on BootstrapTable
Required
Optional
- isDummyField
- type
- hidden
- formatter
- formatExtraData
- sort
- sortValue
- sortFunc
- sortCaret
- onSort
- classes
- style
- title
- events
- align
- attrs
- headerFormatter
- headerClasses
- headerStyle
- headerTitle
- headerEvents
- headerAlign
- headerAttrs
- headerSortingClasses
- headerSortingStyle
- footer
- footerFormatter
- footerClasses
- footerStyle
- footerTitle
- footerEvents
- footerAlign
- footerAttrs
- editable
- validator
- editCellStyle
- editCellClasses
- editorStyle
- editorClasses
- editor
- editorRenderer
- filter
- filterValue
- searchable
- csvType
- csvFormatter
- csvText
- csvExport
column.dataField (required) - [String]
Use dataField
to specify what field should be apply on this column. If your raw data is nested, for example:
const row = {
id: 'A001',
address: {
postal: '1234-12335',
city: 'Chicago'
}
}
You can use dataField
with dot(.
) to describe nested object:
dataField: 'address.postal'
dataField: 'address.city'
column.text (required) - [String]
text
will be the column text in header column by default, if your header is not only text or you want to customize the header column, please check column.headerFormatter
column.type - [String]
Specify the data type on column. Available value so far is string
, number
, bool
and date
. Default is string
.
column.type
can be used when you enable the cell editing and want to save your cell data with correct data type.
column.isDummyField - [Bool]
Sometime, you just want to have a column which is not perform any data but just some action components. In this situation, we suggest you to use isDummyField
. If column is dummy, the column.dataField
can be any string value, cause of it's meaningless. However, please keep dataField
as unique as possible.
There's only one different for dummy column than normal column, which is dummy column will compare the whole row value instead of cell value when call shouldComponentUpdate
.
column.hidden - [Bool]
hidden
allow you to hide column when true
given.
column.formatter - [Function]
formatter
allow you to customize the table column and only accept a callback function which take four arguments and a JSX/String are expected for return.
cell
row
rowIndex
formatExtraData
Attention: Don't use any state data or any external data in formatter function, please pass them via
formatExtraData
. In addition, please make formatter function as pure function as possible as you can.
column.headerFormatter - [Function]
headerFormatter
allow you to customize the header column and only accept a callback function which take three arguments and a JSX/String are expected for return.
column
: current column object itselfcolIndex
: index of current columncomponents
: an object which contain all of other react element, like sort caret or filter etc.
The third argument: components
have following specified properties:
{
sortElement, // sort caret element, it will not be undefined when you enable sort on this column
filterElement // filter element, it will not be undefined when you enable column.filter on this column
}
column.formatExtraData - [Any]
It's only used for column.formatter
, you can define any value for it and will be passed as fourth argument for column.formatter
callback function.
column.sort - [Bool]
Enable the column sort via a true
value given.
column.sortValue - [Function]
column.sortValue
only work when column.sort
enabled. This prop allow you to replace the value when table sorting.
For example, consider following data:
const types = ['Cloud Service', 'Message Service', 'Add Service', 'Edit Service', 'Money'];
const data = [{id: 1, type: 2}, {id: 2, type: 1}, {id: 3, type:0}];
const columns = [{
dataField: 'id',
text: 'Job ID'
}, {
dataField: 'type',
text: 'Job Type'
sort: true,
formatter: (cell, row) => types[cell]
}]
In above case, when user try to sort Job Type column which will sort the original value: 0, 1, 2 but we display the type name via column.formatter
, which will lead confuse because we are sorting by type value instead of type name. So sortValue
is a way for you to decide what kind of value should be adopted when sorting on a specify column:
const columns = [{
dataField: 'id',
text: 'Job ID'
}, {
dataField: 'type',
text: 'Job Type'
sort: true,
formatter: (cell, row) => types[cell],
sortValue: (cell, row) => types[cell] // we use type name to sort.
}]
column.sortFunc - [Function]
column.sortFunc
only work when column.sort
is enable. sortFunc
allow you to define your sorting algorithm. This callback function accept six arguments:
{
// omit...
sort: true,
sortFunc: (a, b, order, dataField, rowA, rowB) => {
if (order === 'asc') return a - b;
else return b - a;
}
}
The possible value of
order
argument isasc
anddesc
.
column.sortCaret - [Function]
Usecolumn.sortCaret
to custom the sort caret. This callback function accept two arguments: order
and column
{
// omit...
sort: true,
sortCaret: (order, column) => {
return //...
}
}
The possible value of
order
argument isasc
,desc
andundefined
.
column.onSort - [Function]
column.onSort
is an event listener for subscribing the event of sort:
{
// omit...
sort: true,
onSort: (field, order) => {
// ....
}
}
column.classes - [String | Function]
It's available to have custom class on table column:
{
// omit...
classes: 'id-custom-cell'
}
In addition, classes
also accept a callback function which have more power to custom the css class on each columns. This callback function take 4 arguments and a String
is expected to return:
{
classes: function callback(cell, row, rowIndex, colIndex) { ... }
}
Parameters
cell
: The value of current cell.row
: The value ofrow
being processed in theBootstrapTable
.rowIndex
: The index of the currentrow
being processed in theBootstrapTable
.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new String
will be the result as element class.
column.headerClasses - [String | Function]
It's similar to column.classes
, headerClasses
is available to have customized class on table header column:
{
// omit...
headerClasses: 'id-custom-cell'
}
Furthermore, it also accept a callback function which takes 2 arguments and a String
is expect to return:
{
headerClasses: function callback(column, colIndex) { ... }
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new String
will be the result of element headerClasses.
column.style - [Object | Function]
It's available to have custom style on table column:
{
// omit...
style: { backgroundColor: 'green' }
}
In addition, similar to column.classes
, style
also accept a callback function which have more power to customize the inline style
on each columns. This callback function takes 4 arguments and an Object
is expect to return:
{
style: function callback(cell, row, rowIndex, colIndex) { ... }
}
Parameters
cell
: The value of current cell.row
: The value ofrow
being processed in theBootstrapTable
.rowIndex
: The index of the currentrow
being processed in theBootstrapTable
.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new Object
will be the result of element style.
column.headerStyle - [Object | Function]
It's available to have customized inline-style on table header column:
{
// omit...
headerStyle: { backgroundColor: 'green' }
}
Moreover, it also accept a callback function which takes 2 arguments and an Object
is expect to return:
{
headerStyle: function callback(column, colIndex) { ... }
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new Object
will be the result of element headerStyle.
column.title - [Bool | Function]
react-bootstrap-table2
is disable HTML title
as default. You can assign title
as true
to enable the HTML title on table column and take cell content
as default value. Additionally, you could customize title via a callback. It takes 4 arguments and a String
is expect to return:
{
// omit...
title: function callback(cell, row, rowIndex, colIndex) { ... }
// return custom title here
}
Parameters
cell
: The value of current cell.row
: The value ofrow
being processed in theBootstrapTable
.rowIndex
: The index of the currentrow
being processed in theBootstrapTable
.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new String
will be the result of element title.
column.headerTitle - [Bool | Function]
headerTitle
is only for the title on header column, default is disable. The usage almost same as column.title
,
{
// omit...
headerTitle: true
}
It's also available to custom via a callback function:
{
headerTitle: function callback(column, colIndex) { ... }
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new String
will be the result of element headerTitle.
column.align - [String | Function]
You can configure the CSS text-align for table column by align
property.
Besides, align
also accept a callback function for dynamically setting text align. It takes 4 arguments and a String
is expect to return:
{
// omit...
align: function callback(cell, row, rowIndex, colIndex) { ... }
}
Parameters
cell
: The value of current cell.row
: The value ofrow
being processed in theBootstrapTable
.rowIndex
: The index of the currentrow
being processed in theBootstrapTable
.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new String
will be the result of element text alignment.
column.headerAlign - [String | Function]
It's almost same as column.align
, but it's for the CSS text-align on header column.
{
// omit...
headerAlign: 'center'
}
Also, you can custom the align by a callback function:
{
// omit...
headerAlign: (column, colIndex) => {
// column is an object and perform itself
// return custom title here
}
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new String
will be the result of element headerAlign.
column.events - [Object]
You can assign any HTML Event on table column via events
property.
react-bootstrap-table2
currently only support following events which will receive some specific information:
- onClick
- onDoubleClick
- onMouseEnter
- onMouseLeave
- onContextMenu
{
// omit...
events: {
onClick: (e, column, columnIndex, row, rowIndex) => { ... },
}
}
If the events is not listed above, the callback function will only receive the event
object.
column.headerEvents - [Object]
headerEvents
same as column.events
but this is for header column.
{
// omit...
headerEvents: {
onClick: (e, column, columnIndex) => { ... }
}
}
column.attrs - [Object | Function]
Via attrs
property, You can customize table column HTML attribute which allow user to configure the elements or adjust their behavior.
{
// omit...
attrs: {
title: 'bar',
'data-test': 'foo'
}
}
Not only Object
, callback function
is also acceptable. It takes 4 arguments and an Object
is expect to return:
{
attrs: function callback(cell, row, rowIndex, colIndex) { ... }
}
Parameters
cell
: The value of current cell.row
: The value ofrow
being processed in theBootstrapTable
.rowIndex
: The index of the currentrow
being processed in theBootstrapTable
.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new Object
will be the result of element HTML attributes.
Caution:
Ifcolumn.classes
,column.style
,column.title
,column.hidden
orcolumn.align
was given at the same time, propertyattrs
has lower priority and it will be overwritten:
{
// omit...
title: true, // get higher priority
attrs: { title: 'test' }
}
column.headerAttrs - [Object | Function]
headerAttrs
is similar to column.attrs
but it works for header column.
{
// omit...
headerAttrs: {
title: 'bar',
'data-test': 'foo'
}
}
Additionally, customize the header attributes by a 2 arguments callback function:
{
// omit...
headerAttrs: (column, colIndex) => ({
// return customized HTML attribute here
})
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
Return value
A new Object
will be the result of element headerAttrs.
Caution:
Same as column.attrs, it has lower priority and will be overwrited when other props related to HTML attributes were given.
headerSortingClasses - [String | Function]
headerSortingClasses
allows to customize class
for header cell when this column is sorting.
const headerSortingClasses = 'demo-sorting';
Furthermore, it also accepts a callback which takes 4 arguments and String
is expected to return:
const headerSortingClasses = (column, sortOrder, isLastSorting, colIndex) => { ... }
column
: The value of current column.sortOrder
: The order of current sortingisLastSorting
: Is the last one of sorted columns.colIndex
: The index of the current column being processed in BootstrapTable.
headerSortingStyle - [Object | Function]
It's similiar to headerSortingClasses. It allows to customize the style of header cell when this column is sorting. A style Object
and callback
are acceptable. callback
takes 4 arguments and an Object
is expected to return:
const sortingHeaderStyle = {
backgroundColor: 'red'
};
column.footer - [String | Function]
Give a string to render the string value on the footer column.
const columns = [{
dataField: 'id',
text: 'Product ID',
footerAlign: 'center',
footer: 'Footer 1'
}, .....];
This prop also accept a function:
{
dataField: 'price',
text: 'Product Price',
footer: (columnData, column, columnIndex) => columnData.reduce((acc, item) => acc + item, 0)
}
column.footerFormatter - [Function]
footerFormatter
allow you to customize the table footer column and only accept a callback function which take two arguments and a JSX/String are expected for return.
column
columnIndex
column.footerClasses - [String | Function]
It's similar to column.classes
, footerClasses
is available to have customized class on table footer column:
{
// omit...
footerClasses: 'id-custom-cell'
}
Furthermore, it also accept a callback function which takes 2 arguments and a String
is expect to return:
{
footerClasses: function callback(column, colIndex) { ... }
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
column.footerStyle - [Object | Function]
Customized the inline-style on table footer column:
{
// omit...
footerStyle: { backgroundColor: 'green' }
}
Moreover, it also accept a callback function which takes 2 arguments and an Object
is expect to return:
{
footerStyle: function callback(column, colIndex) { ... }
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
column.footerTitle - [Bool | Function]
Configure the title on footer column, default is disable. The usage is almost same as column.title
,
{
// omit...
footerTitle: true
}
It's also available to custom via a callback function:
{
footerTitle: function callback(column, colIndex) { ... }
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
column.footerEvents - [Object]
footerEvents
same as column.events
but it is for footer column:
{
// omit...
footerEvents: {
onClick: (e, column, columnIndex) => { ... }
}
}
column.footerAlign - [String | Function]
It's almost same as column.align
, but it's for the CSS text-align on footer column.
{
// omit...
footerAlign: 'center'
}
Also, you can custom the align by a callback function:
{
// omit...
footerAlign: (column, colIndex) => {
// column is an object and perform itself
// return custom title here
}
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
column.footerAttrs - [Object | Function]
footerAttrs
is similar to column.attrs
but it works for footer column.
{
// omit...
footerAttrs: {
title: 'bar',
'data-test': 'foo'
}
}
Additionally, customize the header attributes by a 2 arguments callback function:
{
// omit...
footerAttrs: (column, colIndex) => ({
// return customized HTML attribute here
})
}
Parameters
column
: The value of current column.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
column.editable - [Bool | Function]
column.editable
default is true, means every column is editable if you configure cellEdit
. But you can disable some columns editable via setting false
.
If a callback function given, you can control the editable level as cell level:
{
// omit...
editable: (cell, row, rowIndex, colIndex) => {
// return true or false;
}
}
column.validator - [Function]
column.validator
used for validate the data when cell on updating. it's should accept a callback function with following argument:
newValue
, row
and column
:
{
// omit...
validator: (newValue, row, column) => {
return ...;
}
}
The return value can be a bool or an object. If your validation is pass, return true
explicitly. If your validation is invalid, return following object instead:
{
valid: false,
message: 'SOME_REASON_HERE'
}
If you want to perform a asycn validation, you can do it like this:
{
// omit...
validator: (newValue, row, column, done) => {
settimeout(() => {
// async validation ok
return done();
// async validation not ok
return done({
valid: false,
message: 'SOME_REASON_HERE'
});
}, 2000);
return { async: true };
}
}
column.editCellStyle - [Object | Function]
You can use column.editCellStyle
to custom the style of <td>
when cell editing. It like most of customizable functionality, it also accept a callback function with following params:
Parameters
cell
: The value of current cell.row
: The object ofrow
being processed in theBootstrapTable
.rowIndex
: The index of the currentrow
being processed in theBootstrapTable
.colIndex
: The index of the currentcolumn
being processed inBootstrapTable
.
{
editCellStyle: { ... }
}
Or take a callback function
{
editCellStyle: (cell, row, rowIndex, colIndex) => {
// it is suppose to return an object
}
}
column.editCellClasses - [String | Function]
You can use column.editCellClasses
to add custom class on <td>
when cell editing. It's same as column.editCellStyle
which also accept a callback function to able to custom your class more flexible. Following is the arguments of this callback function: cell
, row
, rowIndex
, colIndex
.
{
editCellClasses: 'custom-class'
}
Or take a callback function
{
editCellClasses: (cell, row, rowIndex, colIndex) => {
// it is suppose to return a string
}
}
column.editorStyle - [Object | Function]
This is almost same as column.editCellStyle
, but column.editorStyle
is for custom the style on editor instead of cell(td
).
column.editorClasses - [String | Function]
This is almost same as column.editCellClasses
, but column.editorClasses
is for custom the class on editor instead of cell(td
).
column.editor - [Object]
column.editor
allow you to custom the type of cell editor by following predefined type:
- Text(Default)
- Dropdown
- Date
- Textarea
- Checkbox
Following is a quite example:
import cellEditFactory, { Type } from 'react-bootstrap-table2-editor';
const columns = [
//...
, {
dataField: 'done',
text: 'Done',
editor: {
type: Type.CHECKBOX,
value: 'Y:N'
}
}
];
Please check here for more detail about rich editors.
column.editorRenderer - [Function]
If you feel above predefined editors are not satisfied to your requirement, you can totally custom the editor via column.editorRenderer
:
import cellEditFactory, { Type } from 'react-bootstrap-table2-editor';
// Custom Editor
class QualityRanger extends React.Component {
static propTypes = {
value: PropTypes.number,
onUpdate: PropTypes.func.isRequired
}
static defaultProps = {
value: 0
}
getValue() {
return parseInt(this.range.value, 10);
}
render() {
const { value, onUpdate, ...rest } = this.props;
return [
<input
{ ...rest }
key="range"
ref={ node => this.range = node }
type="range"
min="0"
max="100"
/>,
<button
key="submit"
className="btn btn-default"
onClick={ () => onUpdate(this.getValue()) }
>
done
</button>
];
}
}
const columns = [
//...
, {
dataField: 'done',
text: 'Done',
editorRenderer: (editorProps, value, row, column, rowIndex, columnIndex) =>
<QualityRanger { ...editorProps } value={ value } />;
}
];
Please check here for more detail.
column.filter - [Object]
Configure column.filter
will able to setup a column level filter on the header column. Currently, react-bootstrap-table2
support following filters:
- Text Filter
- Select Filter
- Number Filter
- Date Filter
We have a quick example to show you how to use column.filter
:
import { textFilter } from 'react-bootstrap-table2-filter';
// omit...
{
dataField: 'price',
text: 'Product Price',
filter: textFilter()
}
For some reason of simple customization, react-bootstrap-table2
allow you to pass some props to filter factory function. Please check here for more detail tutorial.
column.filterValue - [Function]
Sometimes, if the cell/column value that you don't want to filter on them, you can define filterValue
to return a actual value you wanna be filtered:
Parameters
cell
: The value of current cell.row
: The value of current row.
Return value
A final String
value you want to be filtered.
// omit...
{
dataField: 'price',
text: 'Product Price',
filter: textFilter(),
filterValue: (cell, row) => owners[cell]
}
column.searchable - [Bool]
Default the column is searchable. Give false
to disable search functionality on specified column.
column.csvType - [Object]
Default is String
. Currently, the available value is String
and Number
. If Number
assigned, the cell value will not wrapped with double quote.
column.csvFormatter - [Function]
This is same as column.formatter
. But csvFormatter
only for CSV export and called when export CSV.
column.csvText - [String]
Custom the CSV header cell, Default is column.text
.
column.csvExport - [Bool]
Default is true
, false
will hide this column when export CSV.