JavaScript/jQuery TreeList Methods
This section describes methods that you can use to manipulate the TreeList UI component in code.
See Also
addColumn(columnOptions)
Adds a new column.
The column's configuration or a data field for which the column should be created.
This method is intended to add columns at runtime. To add columns at design-time, use the columns array.
If stateStoring is enabled, the added column is saved in the UI component's state after the creation.
See Also
addRow()
Adds an empty data row to the highest hierarchical level and switches it to the editing state.
Use this method if you want to add an empty row. If you need to add a row with data, do the following:
For a remote data source, insert a new row with data into it and reload the data source:
jQuery
JavaScript$(function(){ var treeList = $("#treeListContainer").dxTreeList({ // ... }).dxTreeList("instance"); var dataSource = treeList.getDataSource(); dataSource.store().insert(data).then(function() { dataSource.reload(); }) });
Angular
app.component.tsapp.module.tsimport { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { constructor() { this.dataSource = new DataSource({ // ... }) } // ... insertRowRemote: function(dataObj) { this.dataSource.store().insert(data).then(function() { this.dataSource.reload(); }) } }
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DxTreeListModule } from 'devextreme-angular'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, DxTreeListModule ], bootstrap: [AppComponent] }) export class AppModule { }
Vue
App.vue<template> <DxTreeList :data-source="dataSource" /> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxTreeList from 'devextreme-vue/tree-list'; import DataSource from 'devextreme/data/data_source'; const ds = new DataSource({ // ... }); export default { components: { DxTreeList }, data() { return { dataSource: ds } }, methods: { insertRowRemote: function(dataObj) { ds.store().insert(dataObj).then(() => ds.reload()); } } } </script>
React
App.jsimport React from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList from 'devextreme-react/tree-list'; import DataSource from 'devextreme/data/data_source'; const ds = new DataSource({ // ... }); class App extends React.Component { insertRowRemote(dataObj) { ds.store().insert(dataObj).then(() => ds.reload()); } render() { return ( <TreeList dataSource={ds} /> ); } } export default App;
For a local data source, push a new row into it.
jQuery
JavaScript$(function(){ var treeList = $("#treeListContainer").dxTreeList({ // ... }).dxTreeList("instance");
});var dataSource = treeList.getDataSource(); dataSource.store().push([ { type: "insert", data: data } ])
Angular
app.component.tsapp.module.tsimport { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { constructor() { this.dataSource = new DataSource({ // ... }) } // ... insertRowLocal: function(dataObj) { this.dataSource.store().push([ { type: "insert", data: dataObj } ]) } }
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DxTreeListModule } from 'devextreme-angular'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, DxTreeListModule ], bootstrap: [AppComponent] }) export class AppModule { }
Vue
App.vue<template> <DxTreeList :data-source="dataSource" /> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxTreeList from 'devextreme-vue/tree-list'; import DataSource from 'devextreme/data/data_source'; const ds = new DataSource({ // ... }); export default { components: { DxTreeList }, data() { return { dataSource: ds } }, methods: { insertRowLocal: function(dataObj) { ds.store().push([ { type: "insert", data: dataObj } ]); } } } </script>
React
App.jsimport React from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList from 'devextreme-react/tree-list'; import DataSource from 'devextreme/data/data_source'; const ds = new DataSource({ // ... }); class App extends React.Component { insertRowLocal(dataObj) { ds.store().push([ { type: "insert", data: dataObj } ]); } render() { return ( <TreeList dataSource={ds} /> ); } } export default App;
This method works only when paging.enabled is false or when dataSource.reshapeOnPush is true and remoteOperations is false.
See Also
- TreeList - Add a Row
- editing.allowUpdating
addRow(parentId)
Adds an empty data row to a specified parent row.
The parent row's ID.
See Also
- TreeList - Add a Row
- editing.allowUpdating
beginCustomLoading(messageText)
Shows the load panel.
The text for the load panel to display.
Normally, the load panel is invoked automatically while the UI component is busy rendering or loading data. Additionally, you can invoke it by calling this method. If you call it without the argument, the load panel displays text specified by the loadPanel.text property. To specify the appearance of the load panel, use the loadPanel object. Once invoked from code, the load panel will not hide until you call the endCustomLoading() method.
See Also
beginUpdate()
Postpones rendering that can negatively affect performance until the endUpdate() method is called.
The beginUpdate() and endUpdate() methods reduce the number of renders in cases where extra rendering can negatively affect performance.
See Also
byKey(key)
Gets a data object with a specific key.
A Promise that is resolved after the data object is loaded. It is a native Promise or a jQuery.Promise when you use jQuery.
The following code shows how to get a data object whose key is 15.
jQuery
widgetInstance.byKey(15).done(function(dataObject) { // process "dataObject" }).fail(function(error) { // handle error });
See Also
cellValue(rowIndex, dataField)
Gets the value of a cell with a specific row index and a data field, column caption or name.
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The data field, caption, or unique name of the column to which the cell belongs.
The cell's value.
cellValue(rowIndex, dataField, value)
Sets a new value to a cell with a specific row index and a data field, column caption or name.
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The data field, caption, or unique name of the column to which the cell belongs.
The cell's new value.
TreeList re-renders the entire row or edit form after the cellValue method changes a cell value. To re-render only the modified cell or form item editor, enable repaintChangesOnly.
Call saveEditData() after this method to save the changes:
jQuery
var treeList = $("#treeListContainer").dxTreeList("instance"); treeList.cellValue(0, "Position", "CEO"); treeList.saveEditData();
Angular
import { ..., ViewChild } from "@angular/core"; import { DxTreeListModule, DxTreeListComponent } from "devextreme-angular"; // ... export class AppComponent { @ViewChild(DxTreeListComponent, { static: false }) treeList: DxTreeListComponent; // Prior to Angular 8 // @ViewChild(DxTreeListComponent) treeList: DxTreeListComponent; updateCell(rowIndex, dataField, value) { this.treeList.instance.cellValue(rowIndex, dataField, value); this.treeList.instance.saveEditData(); } } @NgModule({ imports: [ // ... DxTreeListModule ], // ... })
Vue
<template> <DxTreeList ... :ref="treeListRefKey"> </DxTreeList> </template> <script> import 'devextreme/dist/css/dx.light.css'; import { DxTreeList } from 'devextreme-vue/tree-list'; const treeListRefKey = 'my-tree-list'; export default { components: { DxTreeList }, data() { return { treeListRefKey }; }, methods: { updateCell(rowIndex, dataField, value) { this.treeList.cellValue(rowIndex, dataField, value); this.treeList.saveEditData(); } }, computed: { treeList: function() { return this.$refs[treeListRefKey].instance; } } } </script>
React
import React, { useRef } from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList from 'devextreme-react/tree-list'; export default function App() { const treeList = useRef(null); const updateCell = (rowIndex, dataField, value) => { treeList.current.instance().cellValue(rowIndex, dataField, value); treeList.current.instance().saveEditData(); }; return ( <TreeList ... ref={treeList}> </TreeList> ); }
See Also
cellValue(rowIndex, visibleColumnIndex)
Gets the value of a cell with specific row and column indexes.
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The visible index of the column to which the cell belongs.
The cell's value.
See Also
cellValue(rowIndex, visibleColumnIndex, value)
Sets a new value to a cell with specific row and column indexes.
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The visible index of the column to which the cell belongs.
The cell's new value.
Call saveEditData() after this method to save the changes:
jQuery
var treeList = $("#treeListContainer").dxTreeList("instance"); treeList.cellValue(0, 1, "newValue"); treeList.saveEditData();
Angular
import { ..., ViewChild } from "@angular/core"; import { DxTreeListModule, DxTreeListComponent } from "devextreme-angular"; // ... export class AppComponent { @ViewChild(DxTreeListComponent, { static: false }) treeList: DxTreeListComponent; // Prior to Angular 8 // @ViewChild(DxTreeListComponent) treeList: DxTreeListComponent; updateCell(rowIndex, columnIndex, value) { this.treeList.instance.cellValue(rowIndex, columnIndex, value); this.treeList.instance.saveEditData(); } } @NgModule({ imports: [ // ... DxTreeListModule ], // ... })
Vue
<template> <DxTreeList ... :ref="treeListRefKey"> </DxTreeList> </template> <script> import 'devextreme/dist/css/dx.light.css'; import { DxTreeList } from 'devextreme-vue/tree-list'; const treeListRefKey = 'my-tree-list'; export default { components: { DxTreeList }, data() { return { treeListRefKey }; }, methods: { updateCell(rowIndex, columnIndex, value) { this.treeList.cellValue(rowIndex, columnIndex, value); this.treeList.saveEditData(); } }, computed: { treeList: function() { return this.$refs[treeListRefKey].instance; } } } </script>
React
import React, { useRef } from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList from 'devextreme-react/tree-list'; export default function App() { const treeList = useRef(null); const updateCell = (rowIndex, columnIndex, value) => { treeList.current.instance().cellValue(rowIndex, columnIndex, value); treeList.current.instance().saveEditData(); }; return ( <TreeList ... ref={treeList}> </TreeList> ); }
See Also
clearFilter(filterName)
Clears all row filters of a specific type.
The filter type.
The method's parameter specifies what type of filter should be cleared. This parameter can have one of the following values:
- "row"
Clears the filter row. - "header"
Clears the header filter. - "filterValue"
Clears the filter builder and the synchronized filtering UI elements. - "search"
Clears the search panel. - "dataSource"
Clears the data source filter defined in the configuration or applied by the filter(filterExpr) method.
See Also
closeEditCell()
Switches the cell being edited back to the normal state. Takes effect only if editing.mode is batch or cell and showEditorAlways is false.
See Also
collapseAdaptiveDetailRow()
Collapses the currently expanded adaptive detail row (if there is one).
See Also
collapseRow(key)
Collapses a row with a specific key.
The row's key.
A Promise that is resolved after the row is collapsed. It is a native Promise or a jQuery.Promise when you use jQuery.
See Also
columnCount()
Gets the data column count. Includes visible and hidden columns, excludes command columns.
The data column count.
See Also
columnOption(id)
Gets all properties of a column with a specific identifier.
The column's properties.
This method gets the properties of the first column found by either of the below:
Name
The unique name of the column.Column Index
The index of the column in the columns array.Data Field
The name of the data source field assigned to the column.Caption
The text displayed in the column header.Service String
A string that matches the following format: "optionName:value", where optionName is one of the column properties. For example, the following string corresponds to the command column:"type:buttons"
.
See Also
columnOption(id, optionName)
Gets the value of a single column property.
The column's index, data field, caption, type, or unique name. Refer to columnOption(id) for details.
The property's name.
The property's value.
columnOption(id, optionName, optionValue)
Updates the value of a single column property.
The column's index, data field, caption, type, or unique name. Refer to columnOption(id) for details.
The property's name.
The property's new value.
columnOption(id, options)
Updates the values of several column properties.
The column's index, data field, caption, type, or unique name. Refer to columnOption(id) for details.
The properties with their new values.
defaultOptions(rule)
Specifies the device-dependent default configuration properties for this component.
The component's default device properties.
Name | Type | Description |
---|---|---|
device | | |
Device parameters. |
options |
Options to be applied. |
defaultOptions is a static method that the UI component class supports. The following code demonstrates how to specify default properties for all instances of the TreeList UI component in an application executed on the desktop.
jQuery
DevExpress.ui.dxTreeList.defaultOptions({ device: { deviceType: "desktop" }, options: { // Here go the TreeList properties } });
Angular
import TreeList, { Properties } from "devextreme/ui/tree_list"; // ... export class AppComponent { constructor () { TreeList.defaultOptions<Properties>({ device: { deviceType: "desktop" }, options: { // Here go the TreeList properties } }); } }
Vue
<template> <div> <DxTreeList id="treeList1" /> <DxTreeList id="treeList2" /> </div> </template> <script> import DxTreeList from "devextreme-vue/tree-list"; import TreeList from "devextreme/ui/tree_list"; TreeList.defaultOptions({ device: { deviceType: "desktop" }, options: { // Here go the TreeList properties } }); export default { components: { DxTreeList } } </script>
React
import dxTreeList from "devextreme/ui/tree_list"; import TreeList from "devextreme-react/tree-list"; dxTreeList.defaultOptions({ device: { deviceType: "desktop" }, options: { // Here go the TreeList properties } }); export default function App() { return ( <div> <TreeList id="treeList1" /> <TreeList id="treeList2" /> </div> ) }
You can also set rules for multiple device types:
jQuery
const devicesConfig = [ { deviceType: 'desktop' }, { deviceType: 'tablet' }, { deviceType: 'phone' }, ]; devicesConfig.forEach(deviceConfig => { DevExpress.ui.dxTreeList.defaultOptions({ device: deviceConfig, options: { // Here go the TreeList properties } }); });
Angular
import TreeList, { Properties } from "devextreme/ui/tree_list"; // ... export class AppComponent { constructor () { const devicesConfig = [ { deviceType: 'desktop' }, { deviceType: 'tablet' }, { deviceType: 'phone' }, ]; devicesConfig.forEach(deviceConfig => { TreeList.defaultOptions<Properties>({ device: deviceConfig, options: { // Here go the TreeList properties } }); }); } }
Vue
<template> <div> <DxTreeList /> </div> </template> <script> import DxTreeList from "devextreme-vue/tree-list"; import TreeList from "devextreme/ui/tree_list"; const devicesConfig = [ { deviceType: 'desktop' }, { deviceType: 'tablet' }, { deviceType: 'phone' }, ]; devicesConfig.forEach(deviceConfig => { TreeList.defaultOptions({ device: deviceConfig, options: { // Here go the TreeList properties } }); }); export default { components: { DxTreeList } } </script>
React
import dxTreeList from "devextreme/ui/tree_list"; import TreeList from "devextreme-react/tree-list"; const devicesConfig = [ { deviceType: 'desktop' }, { deviceType: 'tablet' }, { deviceType: 'phone' }, ]; devicesConfig.forEach(deviceConfig => { dxTreeList.defaultOptions({ device: deviceConfig, options: { // Here go the TreeList properties } }); }); export default function App() { return ( <div> <TreeList /> </div> ) }
deleteColumn(id)
Removes a column.
This method removes the first column found by either of the below:
Name
The unique name of the column.Column Index
The index of the column in the columns array.Data Field
The name of the data source field assigned to the column.Caption
The text displayed in the column header.
See Also
deleteRow(rowIndex)
Removes a row with a specific index.
The row's index. Refer to Column and Row Indexes for more information.
See Also
deselectAll()
Clears the selection of all rows on all pages or the currently rendered page only.
A Promise that is resolved after the selection is cleared. It is a native Promise or a jQuery.Promise when you use jQuery.
See Also
deselectRows(keys)
Cancels the selection of rows with specific keys.
Array<any>
The row keys.
A Promise that is resolved after selection is cleared. It is a native Promise or a jQuery.Promise when you use jQuery.
See Also
dispose()
Disposes of all the resources allocated to the TreeList instance.
jQuery
After calling this method, remove the DOM element associated with the UI component:
$("#myTreeList").dxTreeList("dispose"); $("#myTreeList").remove();
Angular
Use conditional rendering instead of this method:
<dx-tree-list ... *ngIf="condition"> </dx-tree-list>
Vue
Use conditional rendering instead of this method:
<template> <DxTreeList ... v-if="condition"> </DxTreeList> </template> <script> import DxTreeList from 'devextreme-vue/tree-list'; export default { components: { DxTreeList } } </script>
React
Use conditional rendering instead of this method:
import React from 'react'; import TreeList from 'devextreme-react/tree-list'; function DxTreeList(props) { if (!props.shouldRender) { return null; } return ( <TreeList ... > </TreeList> ); } class App extends React.Component { render() { return ( <DxTreeList shouldRender="condition" /> ); } } export default App;
editCell(rowIndex, dataField)
Switches a cell with a specific row index and a data field to the editing state. Takes effect only if the editing mode is "batch" or "cell".
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The name of the data field in the data source.
editCell(rowIndex, visibleColumnIndex)
Switches a cell with specific row and column indexes to the editing state. Takes effect only if the editing mode is "batch" or "cell".
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The visible index of the column to which the cell belongs.
editRow(rowIndex)
Switches a row with a specific index to the editing state. Takes effect only if the editing mode is "row", "popup" or "form".
The row's index. Refer to Column and Row Indexes for more information.
See Also
element()
Gets the root UI component element.
An HTML element or a jQuery element when you use jQuery.
See Also
endCustomLoading()
Hides the load panel.
Normally, the UI component hides the load panel automatically once data is ready. But if you have invoked the load panel from code using the beginCustomLoading(messageText) method, you must call the endCustomLoading() method to hide it.
See Also
endUpdate()
Refreshes the UI component after a call of the beginUpdate() method.
The beginUpdate() and endUpdate() methods reduce the number of renders in cases where extra rendering can negatively affect performance.
See Also
expandAdaptiveDetailRow(key)
Expands an adaptive detail row.
The key of the data row to which the adaptive detail row belongs.
See Also
expandRow(key)
Expands a row with a specific key.
The row's key.
A Promise that is resolved after the row is expanded. It is a native Promise or a jQuery.Promise when you use jQuery.
See Also
filter()
Gets a filter expression applied to the UI component's data source using the filter(filterExpr) method and the DataSource's filter property.
See Also
filter(filterExpr)
Applies a filter to the dataSource.
The filter passed to this method is not reflected in any of the filtering UI elements and is applied before these elements' filters. To change UI filters in code, use the following properties instead:
Filtering UI Element | Property |
---|---|
Filter Row | columns[].filterValue and columns[].selectedFilterOperation |
Header Filter | columns[].filterValues and columns[].filterType |
Intergrated Filter Builder | filterValue |
Search Panel | searchPanel.text |
To clear all filters applied in code and the UI, call the clearFilter() method.
See Also
forEachNode(callback)
Performs a pre-order tree traversal, executing a function on each visited node. Starts traversing from the top level nodes.
A function to be executed; return false to stop traversing deeper.
forEachNode(nodes, callback)
Performs a pre-order tree traversal, executing a function on each visited node. Starts traversing from the specified nodes.
Nodes from which to start the traversal.
A function to be executed; return false to stop traversing deeper.
getCellElement(rowIndex, dataField)
Gets a cell with a specific row index and a data field, column caption or name.
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The data field, caption, or unique name of the column to which the cell belongs.
The cell's container. It is an HTML Element or a jQuery Element when you use jQuery.
If the specified row or data field does not exist, the method returns undefined.
See Also
getCellElement(rowIndex, visibleColumnIndex)
Gets a cell with specific row and column indexes.
The index of the row to which the cell belongs. Refer to Column and Row Indexes for more information.
The visible index of the column to which the cell belongs.
The cell's container. It is an HTML Element or a jQuery Element when you use jQuery.
If the specified row or column does not exist, the method returns undefined.
See Also
getCombinedFilter()
Gets the total filter that combines all the filters applied.
Use this method to get the total filter. This filter combines filters applied using filtering UI elements and the filter(filterExpr) method. Note that the total filter contains getters. To get the total filter containing data fields, call the getCombinedFilter(returnDataField) method.
See Also
getCombinedFilter(returnDataField)
Gets the total filter that combines all the filters applied.
Use this method to get the total filter that combines filters applied using filtering UI elements and the filter(filterExpr) method. getCombinedFilter(returnDataField) can return a filter expression that uses data fields instead of getters if you pass true
to the returnDataField parameter. If you implement getters like columns[].calculateCellValue in your DataGrid, set returnDataField to false
or utilize the getCombinedFilter() method.
For details on how to obtain all filtered and sorted rows of a DataGrid component with getCombinedFilter(returnDataField), refer to the following example:
For details on how to filter a Chart component's series based on a DataGrid component's filters with getCombinedFilter(returnDataField), refer to the following example:
See Also
getDataSource()
Gets the DataSource instance.
The DataSource instance.
See Also
getInstance(element)
Gets the instance of a UI component found using its DOM node.
The UI component's instance.
getInstance is a static method that the UI component class supports. The following code demonstrates how to get the TreeList instance found in an element with the myTreeList
ID:
// Modular approach import TreeList from "devextreme/ui/tree_list"; ... let element = document.getElementById("myTreeList"); let instance = TreeList.getInstance(element) as TreeList; // Non-modular approach let element = document.getElementById("myTreeList"); let instance = DevExpress.ui.dxTreeList.getInstance(element);
See Also
getKeyByRowIndex(rowIndex)
Gets the key of a row with a specific index.
The row's visible index. Refer to Column and Row Indexes for more information.
The row's key; undefined if nothing found.
See Also
getNodeByKey(key)
Gets a node with a specific key.
The Node object; undefined if nothing found.
See Also
getRowElement(rowIndex)
Gets the container of a row with a specific index.
The row's visible index. Refer to Column and Row Indexes for more information.
See Also
getRowIndexByKey(key)
Gets the index of a row with a specific key.
The row's index; -1 if nothing found. Refer to Column and Row Indexes for more information.
See Also
getScrollable()
Gets the instance of the UI component's scrollable part.
Scrollable
The scrollable part's instance.
For information on API members of the scrollable part, refer to the ScrollView section. The list below shows ScrollView members that are unavailable for this method.
Properties:
- pullingDownText
- pulledDownText
- refreshingText
- reachBottomText
- onPullDown
- onReachBottom
Methods:
- release(preventScrollBottom)
- refresh()
See Also
getSelectedRowKeys()
Gets the keys of the rows selected explicitly via the API or via a click or tap.
Array<any>
Keys of selected rows. The keys are stored in the order the user selects rows.
See Also
getSelectedRowKeys(mode)
Gets selected row keys.
"all", "excludeRecursive", or "leavesOnly".
Array<any>
Selected row keys. Keys are stored in the order users select rows.
Below is an example of a TreeList with several selected rows:
The getSelectedRowKeys(mode) method called for this TreeList returns different results depending on the mode argument:
"all"
Returns all selected row keys.getSelectedRowKeys("all") // returns [2, 5, 8, 9, 6, 10, 4]
"excludeRecursive"
Excludes keys in recursively selected rows.getSelectedRowKeys("excludeRecursive") // returns [2, 6, 10, 4]
"leavesOnly"
Returns keys of the end nodes ("leaves") only.getSelectedRowKeys("leavesOnly") // returns [8, 9, 6, 10, 4]
See Also
getSelectedRowsData()
Gets the data objects of the rows selected explicitly via the API or via a click or tap.
Array<any>
The selected rows' data objects.
The objects are not processed by the DataSource and have the same order in which the rows were selected.
jQuery
var treeList = $("#treeListContainer").dxTreeList("instance"); var selectedRowsData = treeList.getSelectedRowsData();
Angular
import { Component, ViewChild } from '@angular/core'; import { DxTreeListComponent } from 'devextreme-angular'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { @ViewChild('treeListRef', { static: false }) treeList: DxTreeListComponent; // Prior to Angular 8 // @ViewChild('treeListRef') treeList: DxTreeListComponent; selectedRowsData = []; getSelectedData() { this.selectedRowsData = this.treeList.instance.getSelectedRowsData(); } }
<dx-tree-list ... #treeListRef ></dx-tree-list>
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DxTreeListModule } from 'devextreme-angular'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, DxTreeListModule ], providers: [ ], bootstrap: [AppComponent] }) export class AppModule { }
Vue
<template> <DxTreeList ... :ref="treeListRef"> </DxTreeList> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxTreeList from 'devextreme-vue/tree-list'; const treeListRef = 'treeList'; export default { components: { DxTreeList }, data() { return { treeListRef, selectedRowsData: [] } }, computed: { treeList: function() { return this.$refs[treeListRef].instance; } }, methods: { getSelectedData() { this.selectedRowsData = this.treeList.getSelectedRowsData(); } } } </script>
React
import React from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList from 'devextreme-react/tree-list'; class App extends React.Component { constructor(props) { super(props); this.treeListRef = React.createRef(); this.selectedRowsData = []; this.getSelectedData = () => { this.selectedRowsData = this.treeList.getSelectedRowsData(); } } get treeList() { return this.treeListRef.current.instance(); } render() { return ( <TreeList ... ref={this.treeListRef}> </TreeList> ); } } export default App;
ASP.NET MVC Controls
@(Html.DevExtreme().TreeList() .ID("treeList") @* ... *@ ) <script type="text/javascript"> function getSelectedData() { var treeList = $("#treeList").dxTreeList("instance"); var selectedRowsData = treeList.getSelectedRowsData(); // ... } </script>
See Also
getSelectedRowsData(mode)
Gets selected row data objects.
"all", "excludeRecursive", or "leavesOnly".
Array<any>
Selected row data objects.
The objects are not processed by the DataSource and have the same order in which the rows were selected.
Below is an example of a TreeList with several selected rows:
The getSelectedRowsData(mode) method called for this TreeList returns different results depending on the mode argument:
"all"
Returns all selected row data objects.getSelectedRowsData("all") // returns data objects with the following keys: 2, 5, 8, 9, 6, 10, and 4
"excludeRecursive"
Excludes data objects in recursively selected rowsgetSelectedRowsData("excludeRecursive") // returns data objects with the following keys: 2, 6, 10, and 4
"leavesOnly"
Returns data objects of the end nodes ("leaves") only.getSelectedRowsData("leavesOnly") // returns data objects with the following keys: 8, 9, 6, 10, and 4
jQuery
var treeList = $("#treeListContainer").dxTreeList("instance"); var selectedRowsData = treeList.getSelectedRowsData("leavesOnly");
Angular
import { Component, ViewChild } from '@angular/core'; import { DxTreeListComponent } from 'devextreme-angular'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { @ViewChild('treeListRef', { static: false }) treeList: DxTreeListComponent; // Prior to Angular 8 // @ViewChild('treeListRef') treeList: DxTreeListComponent; selectedRowsData = []; getSelectedData() { this.selectedRowsData = this.treeList.instance.getSelectedRowsData('leavesOnly'); } }
<dx-tree-list ... #treeListRef ></dx-tree-list>
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DxTreeListModule } from 'devextreme-angular'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, DxTreeListModule ], providers: [ ], bootstrap: [AppComponent] }) export class AppModule { }
Vue
<template> <DxTreeList ... :ref="treeListRef"> </DxTreeList> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxTreeList from 'devextreme-vue/tree-list'; const treeListRef = 'treeList'; export default { components: { DxTreeList }, data() { return { treeListRef, selectedRowsData: [] } }, computed: { treeList: function() { return this.$refs[treeListRef].instance; } }, methods: { getSelectedData() { this.selectedRowsData = this.treeList.getSelectedRowsData('leavesOnly'); } } } </script>
React
import React from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList from 'devextreme-react/tree-list'; class App extends React.Component { constructor(props) { super(props); this.treeListRef = React.createRef(); this.selectedRowsData = []; this.getSelectedData = () => { this.selectedRowsData = this.treeList.getSelectedRowsData('leavesOnly'); } } get treeList() { return this.treeListRef.current.instance(); } render() { return ( <TreeList ... ref={this.treeListRef}> </TreeList> ); } } export default App;
ASP.NET MVC Controls
@(Html.DevExtreme().TreeList() .ID("treeList") @* ... *@ ) <script type="text/javascript"> function getSelectedData() { var treeList = $("#treeList").dxTreeList("instance"); var selectedRowsData = treeList.getSelectedRowsData(); // ... } </script>
Calculated values cannot be obtained because this method gets data objects from the data source.
If remote operations are enabled, getSelectedRowsData retrieves selection from currently loaded rows only.
See Also
getVisibleColumnIndex(id)
Gets the index of a visible column.
The column's index, data field, caption, type, or unique name. Refer to columnOption(id) for details.
The column's index.
getVisibleColumns()
Gets all visible columns.
Visible columns; may include command columns.
See Also
getVisibleColumns(headerLevel)
Gets all visible columns at a specific hierarchical level of column headers. Use it to access banded columns.
The column headers' level.
Visible columns; may include command columns.
See Also
hasEditData()
Checks whether the UI component has unsaved changes.
true if the UI component has unsaved changes; otherwise - false.
See Also
instance()
Gets the UI component's instance. Use it to access other methods of the UI component.
This UI component's instance.
See Also
isAdaptiveDetailRowExpanded(key)
Checks whether an adaptive detail row is expanded or collapsed.
The key of the data row to which the adaptive detail row belongs.
true if the adaptive detail row is expanded; false if collapsed.
See Also
isRowExpanded(key)
Checks whether a row is expanded or collapsed.
The row's key.
true if the row is expanded; false if collapsed.
See Also
isRowFocused(key)
Checks whether a row with a specific key is focused.
A row's key.
true if the row is focused; otherwise false.
See Also
isRowSelected(key)
Checks whether a row with a specific key is selected.
The row's key.
true if the row is selected; otherwise false.
See Also
keyOf(obj)
Gets a data object's key.
The data object.
The data object's key.
See Also
loadDescendants()
Loads all root node descendants (all data items). Takes effect only if data has the plain structure and remoteOperations.filtering is true.
A Promise that is resolved after data is loaded. It is a native Promise or a jQuery.Promise when you use jQuery.
loadDescendants(keys)
Loads a specific node's descendants. Takes effect only if data has the plain structure and remoteOperations.filtering is true.
Array<any>
Node keys.
A Promise that is resolved after data is loaded. It is a native Promise or a jQuery.Promise when you use jQuery.
loadDescendants(keys, childrenOnly)
Loads all or only direct descendants of specific nodes. Takes effect only if data has the plain structure and remoteOperations.filtering is true.
A Promise that is resolved after data is loaded. It is a native Promise or a jQuery.Promise when you use jQuery.
navigateToRow(key)
Navigates to a row with the specified key.
The row's key.
A Promise that is resolved after the grid is navigated to the specified row. It is a native Promise or a jQuery.Promise when you use jQuery.
This method performs the following actions:
- Switches the UI component to the data page that contains the specified row.
- Expands groups in which the row is nested.
- Scrolls the UI component to display the row (if the row is outside the viewport).
The following requirements apply when you use this method:
The UI component's keyExpr or the store's key property should be specified.
Rows should be initially sorted by keys. You can sort them on the server or use a column's sortOrder or the DataSource's sort property to sort the rows on the client.
If you enable the remoteOperations property, the TreeList generates additional requests with comparison operators (for example, <
and >
) to calculate the page number where a row with a focused key is located. This logic does not work if ODataStore is bound to a table with GUID keys. You need to set the autoNavigateToFocusedRow property to false or disable the remoteOperations property to ensure it operates correctly.
See Also
off(eventName)
Detaches all event handlers from a single event.
The event's name.
The object for which this method is called.
See Also
off(eventName, eventHandler)
Detaches a particular event handler from a single event.
The object for which this method is called.
See Also
on(eventName, eventHandler)
Subscribes to an event.
The object for which this method is called.
Use this method to subscribe to one of the events listed in the Events section.
See Also
on(events)
Subscribes to events.
Events with their handlers: { "eventName1": handler1, "eventName2": handler2, ...}
The object for which this method is called.
Use this method to subscribe to several events with one method call. Available events are listed in the Events section.
See Also
option(optionName)
Gets the value of a single property.
The property's name or full path.
This property's value.
See Also
option(options)
Updates the values of several properties.
Options with their new values.
See Also
pageIndex()
Gets the current page index.
The current page index.
When the scrolling mode is "virtual", this method returns the index of the page whose row is shown first in the UI component.
See Also
pageIndex(newIndex)
Switches the UI component to a specific page using a zero-based index.
The zero-based page index.
A Promise that is resolved after the page is shown. It is a native Promise or a jQuery.Promise when you use jQuery.
See Also
refresh()
Reloads data and repaints data rows.
A Promise that is resolved after data is loaded. It is a native Promise or a jQuery.Promise when you use jQuery.
refresh() calls dataSource.reload() and refreshes component properties such as selection and lookup column dataSources. This method also repaints all data rows if repaintChangesOnly is false
(default).
TreeList cannot track data source changes applied outside of the component. To update the component in such cases, call the refresh() method.
The following code snippet shows how to call refresh():
jQuery
var treeList = $("#treeListContainer").dxTreeList("instance"); treeList.refresh() .done(function() { // ... }) .fail(function(error) { // ... });
Angular
<dx-tree-list #treeListVar ... > <!-- ... --> </dx-tree-list>
import { Component, ViewChild } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { @ViewChild('treeListVar', { static: false }) treeList: DxTreeListComponent; // Prior to Angular 8 // @ViewChild('treeListVar') treeList: DxTreeListComponent; refreshTreeList() { this.treeList.instance.refresh() .then(function() { // ... }) .catch(function(error) { // ... }); } }
Vue
<template> <DxTreeList ... :ref="treeListRefKey"> <!-- ... --> </DxTreeList> </template> <script> import 'devextreme/dist/css/dx.light.css'; import { DxTreeList, /* ... */ } from 'devextreme-vue/tree-list'; const treeListRefKey = 'my-tree-list'; export default { components: { DxTreeList, // ... }, data() { return { treeListRefKey }; }, computed: { treeList: function() { return this.$refs[treeListRefKey].instance; } }, methods: { refreshTreeList() { this.treeList.refresh() .then(function() { // ... }) .catch(function(error) { // ... }); } } }; </script>
React
import React from 'react'; import 'devextreme/dist/css/dx.light.css'; import { TreeList, /* ... */ } from 'devextreme-react/tree-list'; class App extends React.Component { render() { return ( <TreeList ... ref={ref => this.treeList = ref}> {/* ... */} </TreeList> ); } refreshTreeList() { this.treeList.instance.refresh() .then(function() { // ... }) .catch(function(error) { // ... }); } } export default App;
ASP.NET MVC Controls
@(Html.DevExtreme().TreeList() .ID("treeListContainer") // ... ) <script type="text/javascript"> function refreshTreeList() { var treeList = $("#treeListContainer").dxTreeList("instance"); treeList.refresh() .done(function() { // ... }) .fail(function(error) { // ... }); } </script>
- Calling the refresh() method in edit mode discards unsaved changes and cancels the edit mode. When editing.mode is "batch", the component cancels the edit mode but does not discard unsaved changes.
- refresh() does not repaint the editing popup when editing.mode is "popup".
- The component may reject the refresh promise if TreeList accesses its dataSource while the promise is in progress. To avoid rejecting the refresh promise, modify properties that initiate data queries after refresh is completed.
See Also
refresh(changesOnly)
Reloads data and repaints all or only updated data rows.
Pass true to repaint updated data rows; false to repaint all data rows.
A Promise that is resolved after data is loaded. It is a native Promise or a jQuery.Promise when you use jQuery.
repaint()
Renders the component again without reloading data. Use the method to update the component's markup and appearance dynamically.
The repaint()
method re-initializes the component with new settings, resetting its state and history.
See Also
- reload() in DataSource | List
- refresh() in DataGrid | TreeList
repaintRows(rowIndexes)
Repaints specific rows.
Row indexes. Refer to Column and Row Indexes for more information.
This method updates the row objects and their visual representation.
See Also
resetOption(optionName)
Resets a property to its default value.
A property's name.
See Also
saveEditData()
Saves changes that a user made to data.
A Promise that is resolved after changes are saved in the data source. It is a native Promise or a jQuery.Promise when you use jQuery.
See Also
searchByText(text)
Seeks a search string in the columns whose allowSearch property is true.
A search string. Pass an empty string to clear search results.
See Also
selectAll()
Selects all rows.
A Promise that is resolved after all rows are selected. It is a native Promise or a jQuery.Promise when you use jQuery.
If a filter is applied, this method selects only those rows that meet the filtering conditions.
See Also
selectRows(keys, preserve)
Selects rows with specific keys.
A Promise that is resolved after the rows are selected. It is a native Promise or a jQuery.Promise when you use jQuery.
By default, this method call clears selection of previously selected rows. To keep these rows selected, call this method with true as the second argument.
widgetInstance.selectRows([5, 10, 12], true);
If you specify DataGrid's key as composite (for example, key: ['id', 'name']
), you need to call this method as follows:
widgetInstance.selectRows([ { id: 5, name: 'Alex' }, { id: 10: name: 'Bob' } ], true);
See Also
selectRowsByIndexes(indexes)
Selects rows with specific indexes.
A Promise that is resolved after the rows are selected. It is a native Promise or a jQuery.Promise when you use jQuery.
This method has the following specifics:
- This method call clears selection of all previously selected rows.
- When calculating row indexes, the UI component counts data and group rows. Nevertheless, only data rows can be selected.
- If the pager is used, selection is cleared once a user moves to a different page. To preserve it, call this method within the onContentReady handler.
See Also
showColumnChooser()
Shows the column chooser.
If the following conditions are met:
You use state storing.
columnChooser.enabled is set to
false
(default).You call this method.
Then, column chooser may not update data. To fix this issue, assign true
to the columnChooser.enabled property. If you still want to hide the default column chooser icon, use the toolbar option.
See Also
state()
Gets the current UI component state.
The current UI component state.
The following example shows how to save the UI component state in the local storage and load it from there:
jQuery
$(function () { const treeList = $("#treeListContainer").dxTreeList({ // ... }).dxTreeList("instance"); $("#save").dxButton({ text: "Save State", onClick: function() { const state = treeList.state(); // Saves the state in the local storage localStorage.setItem("treeListState", JSON.stringify(state)); } }); $("#load").dxButton({ text: "Load State", onClick: function() { const state = JSON.parse(localStorage.getItem("treeListState")); treeList.state(state); } }); });
Angular
import { Component, ViewChild } from "@angular/core"; import { DxTreeListModule, DxButtonModule, DxTreeListComponent } from "devextreme-angular"; // ... export class AppComponent { @ViewChild(DxTreeListComponent, { static: false }) treeList: DxTreeListComponent // Prior to Angular 8 // @ViewChild(DxTreeListComponent) treeList: DxTreeListComponent saveState() { const state = this.treeList.instance.state(); // Saves the state in the local storage localStorage.setItem("treeListState", JSON.stringify(state)); } loadState() { const state = JSON.parse(localStorage.getItem("treeListState")); this.treeList.instance.state(state); } } @NgModule({ imports: [ DxTreeListModule, DxButtonModule, // ... ], // ... })
<dx-tree-list ...> </dx-tree-list> <dx-button text="Save State" (onClick)="saveState()"> </dx-button> <dx-button text="Load State" (onClick)="loadState()"> </dx-button>
Vue
<template> <DxTreeList ... :ref="treeListRefKey"> </DxTreeList> <DxButton text="Save State" @click="saveState" /> <DxButton text="Load State" @click="loadState" /> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxTreeList, { // ... } from 'devextreme-vue/tree-list'; import DxButton from 'devextreme-vue/button'; const treeListRefKey = "my-tree-list"; export default { components: { DxTreeList, // ... DxButton }, data() { return { treeListRefKey } }, methods: { saveState() { const state = this.treeList.state(); // Saves the state in the local storage localStorage.setItem("treeListState", JSON.stringify(state)); }, loadState() { const state = JSON.parse(localStorage.getItem("treeListState")); this.treeList.state(state); } }, computed: { treeList: function() { return this.$refs[treeListRefKey].instance; } } } </script>
React
import React, { useRef } from 'react'; import 'devextreme/dist/css/dx.light.css'; import TreeList, { // ... } from 'devextreme-react/tree-list'; import Button from 'devextreme-react/button'; export default function App() { const treeList = useRef(null); const saveState = () => { const state = treeList.current.instance().state(); // Saves the state in the local storage localStorage.setItem("treeListState", JSON.stringify(state)); }; const loadState = () => { const state = JSON.parse(localStorage.getItem("treeListState")); treeList.current.instance().state(state); }; return ( <React.Fragment> <TreeList ... ref={treeList}> </TreeList> <Button text="Save State" onClick={saveState} /> <Button text="Load State" onClick={loadState} /> </React.Fragment> ); }
See Also
state(state)
Sets the UI component state.
The UI component's state to be set. The state
object will override the current state.
After the state is set, the TreeList reloads data to apply sorting, filtering, and other data processing settings.
Refer to the state() method description for an example of how to work with the UI component state.
See Also
undeleteRow(rowIndex)
Recovers a row deleted in batch editing mode.
The row's index. Refer to Column and Row Indexes for more information.