Your search did not match any results.
Data Grid

Remote Grouping


The DataGrid widget allows your end users to shape data as needs dictate. In this example, we demonstrate the use of the built-in data grouping feature against a remote data source. Data is provided by an OData service and grid content is grouped by both Status and Priority columns. Note that this demo uses the DataGrid in a virtual mode and loads data on-demand as the grid content is scrolled vertically.

Copy to CodeSandBox
import React from 'react'; import DataGrid, { Column, GroupPanel, Scrolling, Lookup } from 'devextreme-react/data-grid'; import 'devextreme/data/odata/store'; const dataSourceOptions = { store: { type: 'odata', url: '' }, expand: 'ResponsibleEmployee', select: [ 'Task_ID', 'Task_Subject', 'Task_Start_Date', 'Task_Due_Date', 'Task_Status', 'Task_Priority', 'ResponsibleEmployee/Employee_Full_Name' ] }; const priority = [ { name: 'High', value: 4 }, { name: 'Urgent', value: 3 }, { name: 'Normal', value: 2 }, { name: 'Low', value: 1 } ]; class App extends React.Component { render() { return ( <DataGrid id={'gridContainer'} dataSource={dataSourceOptions} showBorders={true} > <GroupPanel visible={true} /> <Scrolling mode={'virtual'} /> <Column dataField={'Task_ID'} width={90} /> <Column dataField={'Task_Subject'} caption={'Subject'} width={190} /> <Column dataField={'Task_Status'} caption={'Status'} groupIndex={0} /> <Column dataField={'Task_Priority'} caption={'Priority'} groupIndex={1}> <Lookup dataSource={priority} displayExpr={'name'} valueExpr={'value'} /> </Column> <Column dataField={'ResponsibleEmployee.Employee_Full_Name'} caption={'Assigned To'} allowGrouping={false} allowSorting={false} /> <Column dataField={'Task_Start_Date'} caption={'Start Date'} dataType={'date'} /> <Column dataField={'Task_Due_Date'} caption={'Due Date'} dataType={'date'} /> </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="dx-theme" data-theme="generic.light" href="" /> <link rel="stylesheet" type ="text/css" href ="styles.css" /> <script src=""></script> <script src=""></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
#gridContainer { height: 420px; }
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.1', 'devextreme-react': 'npm:devextreme-react@19.1', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', // 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 } });