DevExtreme v26.1 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

React Data Grid - Data Validation

The DataGrid allows you to validate user input. You can apply pre-defined validation rules or custom rules to individual columns.

Backend API
import React from 'react'; import DataGrid, { Column, Editing, Paging, RequiredRule, PatternRule, EmailRule, AsyncRule, } from 'devextreme-react/data-grid'; import type { IAsyncRuleProps } from 'devextreme-react/data-grid'; import { createStore } from 'devextreme-aspnet-data-nojquery'; const baseUrl = 'https://js.devexpress.com/Demos/NetCore'; const url = `${baseUrl}/api/DataGridEmployeesValidation`; const emailValidationUrl = `${baseUrl}/RemoteValidation/CheckUniqueEmailAddress`; const dataSource = createStore({ key: 'ID', loadUrl: url, insertUrl: url, updateUrl: url, deleteUrl: url, onBeforeSend: (method, ajaxOptions) => { ajaxOptions.xhrFields = { withCredentials: true }; }, }); const asyncValidation: IAsyncRuleProps['validationCallback'] = async (params) => { const response = await fetch(`${emailValidationUrl}?${new URLSearchParams({ id: params.data.ID, email: params.value, })}`); const result = await response.json(); return result; }; const App = () => ( <DataGrid dataSource={dataSource} showBorders={true} columnAutoWidth={true} repaintChangesOnly={true} > <Paging enabled={false} /> <Editing mode="batch" allowUpdating={true} allowAdding={true} /> <Column dataField="FirstName"> <RequiredRule /> </Column> <Column dataField="LastName"> <RequiredRule /> </Column> <Column dataField="Position"> <RequiredRule /> </Column> <Column dataField="Phone"> <RequiredRule /> <PatternRule message='Your phone must have "(555) 555-5555" format!' pattern={/^\(\d{3}\) \d{3}-\d{4}$/i} /> </Column> <Column dataField="Email"> <RequiredRule /> <EmailRule /> <AsyncRule message="Email address is not unique" validationCallback={asyncValidation} /> </Column> </DataGrid> ); export default App;
import React from 'react'; import DataGrid, { Column, Editing, Paging, RequiredRule, PatternRule, EmailRule, AsyncRule, } from 'devextreme-react/data-grid'; import { createStore } from 'devextreme-aspnet-data-nojquery'; const baseUrl = 'https://js.devexpress.com/Demos/NetCore'; const url = `${baseUrl}/api/DataGridEmployeesValidation`; const emailValidationUrl = `${baseUrl}/RemoteValidation/CheckUniqueEmailAddress`; const dataSource = createStore({ key: 'ID', loadUrl: url, insertUrl: url, updateUrl: url, deleteUrl: url, onBeforeSend: (method, ajaxOptions) => { ajaxOptions.xhrFields = { withCredentials: true }; }, }); const asyncValidation = async (params) => { const response = await fetch( `${emailValidationUrl}?${new URLSearchParams({ id: params.data.ID, email: params.value, })}`, ); const result = await response.json(); return result; }; const App = () => ( <DataGrid dataSource={dataSource} showBorders={true} columnAutoWidth={true} repaintChangesOnly={true} > <Paging enabled={false} /> <Editing mode="batch" allowUpdating={true} allowAdding={true} /> <Column dataField="FirstName"> <RequiredRule /> </Column> <Column dataField="LastName"> <RequiredRule /> </Column> <Column dataField="Position"> <RequiredRule /> </Column> <Column dataField="Phone"> <RequiredRule /> <PatternRule message='Your phone must have "(555) 555-5555" format!' pattern={/^\(\d{3}\) \d{3}-\d{4}$/i} /> </Column> <Column dataField="Email"> <RequiredRule /> <EmailRule /> <AsyncRule message="Email address is not unique" validationCallback={asyncValidation} /> </Column> </DataGrid> ); export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.tsx'; // eslint-disable-next-line import/no-unresolved import 'anti-forgery'; ReactDOM.render( <App />, document.getElementById('app'), );
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; import 'anti-forgery'; ReactDOM.render(<App />, document.getElementById('app'));
<!DOCTYPE html> <html lang="en"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/26.1.5/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="styles.css" /> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> <script src="bundles/vendor/react.vendor.js"></script> <script src="./bundle.js"></script> </body> </html>

In this demo, the following rules are used:

  • required
    Specifies that cells should not be empty.
  • pattern
    Specifies a pattern that cell values should match.
  • email
    Specifies that cell values match the Email pattern.
  • async
    Specifies custom validation parameters that are used to validate a value on the server.

For more information on these and other validation rules, refer to the following documentation section: Validation Rules.