Your search did not match any results.
Data Grid

Custom Data Source


For consuming data from a data source, which is not supported by the DevExtreme data layer out of the box, the DataGrid uses the CustomStore. To load data, the CustomStore needs the load function that you should implement by yourself. Note that this store can be declared explicitly or in the DataSource configuration object.

Copy to CodeSandBox
import React from 'react'; import 'devextreme/data/odata/store'; import DataGrid, { Column, Paging, Pager } from 'devextreme-react/data-grid'; import CustomStore from 'devextreme/data/custom_store'; import 'whatwg-fetch'; function isNotEmpty(value) { return value !== undefined && value !== null && value !== ''; } const store = new CustomStore({ key: 'OrderNumber', load: function(loadOptions) { let params = '?'; [ 'skip', 'take', 'requireTotalCount', 'requireGroupCount', 'sort', 'filter', 'totalSummary', 'group', 'groupSummary' ].forEach(function(i) { if (i in loadOptions && isNotEmpty(loadOptions[i])) { params += `${i}=${JSON.stringify(loadOptions[i])}&`; } }); params = params.slice(0, -1); return fetch(`${params}`) .then(response => response.json()) .then((data) => { return { data:, totalCount: data.totalCount, summary: data.summary, groupCount: data.groupCount }; }) .catch(() => { throw 'Data Loading Error'; }); } }); class App extends React.Component { render() { return ( <DataGrid dataSource={store} showBorders={true} remoteOperations={true} > <Column dataField="OrderNumber" dataType="number" /> <Column dataField="OrderDate" dataType="date" /> <Column dataField="StoreCity" dataType="string" /> <Column dataField="StoreState" dataType="string" /> <Column dataField="Employee" dataType="string" /> <Column dataField="SaleAmount" dataType="number" format="currency" /> <Paging defaultPageSize={12} /> <Pager showPageSizeSelector={true} allowedPageSizes={[8, 12, 20]} /> </DataGrid> ); } } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render( <App />, document.getElementById('app') );
<!DOCTYPE html> <html> <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=1.0" /> <link rel="stylesheet" type="text/css" href="" /> <link rel="stylesheet" type="text/css" href="" /> <script src=""></script> <script src=""></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> <link rel="stylesheet" type="text/css" href="styles.css" /> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': '' }, defaultExtension: 'js', map: { 'react': 'npm:react@16/umd/react.development.js', 'react-dom': 'npm:react-dom@16/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'devextreme': 'npm:devextreme@19.2', 'devextreme-react': 'npm:devextreme-react@19.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.7/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', 'devexpress-gantt': 'npm:devexpress-gantt', 'whatwg-fetch': 'npm:whatwg-fetch@2.0.4/fetch.js', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, packages: { 'devextreme': { defaultExtension: 'js' }, 'devextreme-react': { main: 'index.js' } }, babelOptions: { sourceMaps: false, stage0: true, react: true } });