DevExtreme v23.2 is now available.

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

Your search did not match any results.

Load Data on Demand

The TreeList can load a remote dataset dynamically as a user expands nodes. The dataset must have a plain structure.

This feature requires client- and server-side configurations. To configure the client-side part, do the following:

  1. Send an expanded node's ID to the server
    For this, implement the CustomStore's load function. In this demo, we do it in the dataSource configuration object.

  2. Delegate filtering to the server
    Set the remoteOperations.filtering property to true.

  3. Specify the data field that defines whether the node has children
    Use the hasItemsExpr property to set this data field.

Server-side implementation is available in the ASP.NET Core and ASP.NET MVC versions of this demo under the TreeListDataController.cs tab.

NOTE

This demo uses a simple data bind technique that is useful for data display purposes only. When a user clicks a node, TreeList receives a JSON object from the server, which is based on the parentIds property value. This technique does not support the built-in data process operations in TreeList on the server.

If your project needs to process data, do one of the following instead:

Backend API
$(() => { $('#treelist').dxTreeList({ dataSource: { load(options) { return $.ajax({ url: 'https://js.devexpress.com/Demos/Mvc/api/treeListData', dataType: 'json', data: { parentIds: options.parentIds }, }).then((result) => ({ data: result, })); }, }, remoteOperations: { filtering: true, }, keyExpr: 'id', parentIdExpr: 'parentId', hasItemsExpr: 'hasItems', rootValue: '', showBorders: true, columns: [ { dataField: 'name' }, { dataField: 'size', width: 100, customizeText(e) { if (e.value !== null) { return `${Math.ceil(e.value / 1024)} KB`; } return null; }, }, { dataField: 'createdDate', dataType: 'date', width: 150 }, { dataField: 'modifiedDate', dataType: 'date', width: 150 }, ], }); });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <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" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/23.2.5/css/dx.light.css" /> <script src="js/dx.all.js"></script> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="index.js"></script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="treelist"></div> </div> </body> </html>
#treelist { max-height: 440px; }