Your search did not match any results.
Tree List

Web API Service


This example demonstrates the TreeList widget communicating with a Web API service. All data editing and data processing operations are delegated to the server. The DevExtreme.AspNet.Data extension’s method configures access to the server from the client. The server implementation is available under the TreeListTasksController tab in the ASP.NET MVC version of this demo.

Copy to CodeSandBox
import React from 'react'; import TreeList, { RemoteOperations, Column, SearchPanel, HeaderFilter, Editing, RequiredRule, Lookup } from 'devextreme-react/tree-list'; import AspNetData from 'devextreme-aspnet-data-nojquery'; const url = ''; const tasksData = AspNetData.createStore({ key: 'Task_ID', loadUrl: `${url}/Tasks`, insertUrl: `${url}/InsertTask`, updateUrl: `${url}/UpdateTask`, deleteUrl: `${url}/DeleteTask`, onBeforeSend: function(method, ajaxOptions) { ajaxOptions.xhrFields = { withCredentials: true }; } }); const employeesData = AspNetData.createStore({ key: 'ID', loadUrl: `${url}/TaskEmployees` }); const statusesData = [ 'Not Started', 'Need Assistance', 'In Progress', 'Deferred', 'Completed' ]; const initNewRow = function(e) { = 'Not Started'; = new Date(); = new Date(); }; class App extends React.Component { render() { return ( <TreeList id={'tree-list'} dataSource={tasksData} keyExpr={'Task_ID'} parentIdExpr={'Task_Parent_ID'} hasItemsExpr={'Has_Items'} expandedRowKeys={[1, 2]} showRowLines={true} showBorders={true} columnAutoWidth={true} wordWrapEnabled={true} onInitNewRow={initNewRow}> <RemoteOperations filtering={true} sorting={true} grouping={true} /> <SearchPanel visible={true} /> <HeaderFilter visible={true} /> <Editing mode={'row'} allowAdding={true} allowUpdating={true} allowDeleting={true} /> <Column dataField={'Task_Subject'} minWidth={250}> <RequiredRule /> </Column> <Column dataField={'Task_Assigned_Employee_ID'} caption={'Assigned'} minWidth={120}> <Lookup dataSource={employeesData} valueExpr={'ID'} displayExpr={'Name'} /> <RequiredRule /> </Column> <Column dataField={'Task_Status'} caption={'Status'} minWidth={120}> <Lookup dataSource={statusesData} /> </Column> <Column dataField={'Task_Start_Date'} caption={'Start Date'} dataType={'date'} /> <Column dataField={'Task_Due_Date'} caption={'Due Date'} dataType={'date'} /> </TreeList> ); } } 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>
#tree-list { max-height: 640px; }
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@18.2', 'devextreme-react': 'npm:devextreme-react@18.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'devextreme-aspnet-data-nojquery': 'npm:devextreme-aspnet-data-nojquery@2.0.0', // 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 } });