Your search did not match any results.
Tree List

Web API Service

Documentation

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 DevExpress.data.AspNet.createStore 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
Apply
Reset
<template> <div> <dx-tree-list id="tree-list" :data-source="tasksData" :expanded-row-keys="[1, 2]" :show-row-lines="true" :show-borders="true" :column-auto-width="true" :word-wrap-enabled="true" key-expr="Task_ID" parent-id-expr="Task_Parent_ID" has-items-expr="Has_Items" @initNewRow="initNewRow($event)" > <dx-remote-operations :filtering="true" :sorting="true" :grouping="true" /> <dx-search-panel :visible="true"/> <dx-header-filter :visible="true"/> <dx-editing :allow-adding="true" :allow-updating="true" :allow-deleting="true" mode="row" /> <dx-column :min-width="250" data-field="Task_Subject" > <dx-required-rule/> </dx-column> <dx-column :min-width="120" data-field="Task_Assigned_Employee_ID" caption="Assigned" > <dx-lookup :data-source="employeesData" value-expr="ID" display-expr="Name" /> <dx-required-rule/> </dx-column> <dx-column :min-width="120" data-field="Task_Status" caption="Status" > <dx-lookup :data-source="statusesData"/> </dx-column> <dx-column data-field="Task_Start_Date" caption="Start Date" data-type="date" /> <dx-column data-field="Task_Due_Date" caption="Due Date" data-type="date" /> </dx-tree-list> </div> </template> <script> import { DxTreeList, DxRemoteOperations, DxColumn, DxSearchPanel, DxHeaderFilter, DxEditing, DxRequiredRule, DxLookup } from 'devextreme-vue/tree-list'; import AspNetData from 'devextreme-aspnet-data-nojquery'; const url = 'https://js.devexpress.com/Demos/Mvc/api/TreeListTasks'; export default { components: { DxTreeList, DxRemoteOperations, DxColumn, DxSearchPanel, DxHeaderFilter, DxEditing, DxRequiredRule, DxLookup }, data() { return { 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 }; } }), employeesData: AspNetData.createStore({ key: 'ID', loadUrl: `${url}/TaskEmployees` }), statusesData: [ 'Not Started', 'Need Assistance', 'In Progress', 'Deferred', 'Completed' ] }; }, methods: { initNewRow(e) { e.data.Task_Status = 'Not Started'; e.data.Task_Start_Date = new Date(); e.data.Task_Due_Date = new Date(); } } }; </script> <style scoped> #tree-list { max-height: 640px; } </style>
import Vue from 'vue'; import App from './App.vue'; new Vue({ el: '#app', components: { App }, template: '<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="https://cdn3.devexpress.com/jslib/19.1.7/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.7/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></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"> <span v-if="false">Loading...</span> </div> </div> </body> </html>
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': 'https://unpkg.com/' }, map: { vue: 'npm:vue@2.6.3/dist/vue.esm.browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@latest/index.js', 'devextreme': 'npm:devextreme@19.1', 'devextreme-vue': 'npm:devextreme-vue@19.1', jszip: 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.7/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', 'devextreme-aspnet-data-nojquery': 'npm:devextreme-aspnet-data-nojquery@2.5.1', 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, meta: { '*.vue': { loader: 'vue-loader' } }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });