Use the Node Iterator
- 3 minutes to read
The ASPxTreeList introduces the Node Iterator, which allows you to traverse through the nodes and avoid writing recursive code.
To use the Node Iterator you should create a new instance of the TreeListNodeIterator object. A start node is specified within the constructor.
To start traversing from the root node, pass the ASPxTreeList.RootNode as a parameter.
You can also use the ASPxTreeList.CreateNodeIterator method to create the Nodes Iterator.
TreeListNodeIterator iterator = treeList.CreateNodeIterator(startNode);
// Starts traversing from the root node
TreeListNodeIterator iteratorFromRoot = treeList.CreateNodeIterator();
The current node is returned by the TreeListNodeIterator.Current property. To obtain the next node, use the TreeListNodeIterator.GetNext method.
To return the Node Iterator to its default state, call the TreeListNodeIterator.Reset method.
Example
This example shows how to collect the key values of all parent nodes displayed within the ASPxTreeList. The TreeListNodeIterator object is used to traverse through the nodes.
<dx:ASPxTreeList ID="treeList" runat="server" Width="100%" KeyFieldName="ID" ParentFieldName="Parent_ID"
AutoGenerateColumns="False" OnDataBound="treeList_DataBound">
<Columns>
<dx:TreeListDataColumn FieldName="Title" VisibleIndex="0" />
</Columns>
</dx:ASPxTreeList>
using DevExpress.Web.ASPxTreeList;
using System;
using System.Collections.Generic;
using System.Data;
protected void Page_Load(object sender, EventArgs e) {
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Parent_ID");
dt.Columns.Add("Title");
dt.Rows.Add(dt.NewRow());
dt.Rows[dt.Rows.Count - 1]["ID"] = 1;
dt.Rows[dt.Rows.Count - 1]["Parent_ID"] = null;
dt.Rows[dt.Rows.Count - 1]["Title"] = "One";
dt.Rows.Add(dt.NewRow());
dt.Rows[dt.Rows.Count - 1]["ID"] = 4;
dt.Rows[dt.Rows.Count - 1]["Parent_ID"] = 1;
dt.Rows[dt.Rows.Count - 1]["Title"] = "One A";
dt.Rows.Add(dt.NewRow());
dt.Rows[dt.Rows.Count - 1]["ID"] = 5;
dt.Rows[dt.Rows.Count - 1]["Parent_ID"] = 1;
dt.Rows[dt.Rows.Count - 1]["Title"] = "One B";
treeList.DataSource = dt;
treeList.DataBind();
}
protected void treeList_DataBound(object sender, EventArgs e) {
ASPxTreeList list = sender as ASPxTreeList;
ProcessNodes(list.Nodes[0]);
}
List<string> nodeKeys;
void ProcessNodes(TreeListNode startNode) {
if (startNode == null) return;
TreeListNodeIterator iterator = new TreeListNodeIterator(startNode);
nodeKeys = new List<string>();
while (iterator.Current != null) {
GetParentNodeKey(iterator.Current);
iterator.GetNext();
}
}
private void GetParentNodeKey(TreeListNode node) {
if (node != treeList.RootNode && node.HasChildren)
nodeKeys.Add(node.Key);
}