Click here to Skip to main content
13,768,526 members
Click here to Skip to main content
Add your own
alternative version


43 bookmarked
Posted 29 Dec 2010
Licenced CPOL

Dynamic Binding Of Hierarchy Data Structure To Treeview Control

, 29 Dec 2010
Rate this:
Please Sign up or sign in to vote.
The article provides a code base for implementing dynamic hierarchical data structure with ASP.NET Treeview control

Table of Contents

  1. Introduction
  2. Business Requirement
  3. Solution
  4. Database Implementation
  5. Recursive Function
  6. Conclusion
  7. Reference


ASP.NET Treeview control is the most used server control for representing tree view hierarchy data structure. Most of the time, we get requirements related to hierarchical tree structure of data representation; this becomes more complicated and complex if we've depth of leaf node to extreme extent. In such scenarios, we may have to look at generic solution. This article will help a developer to use the below logic or implementation to tackle similar situations.

Business Requirement

Say for example, we've business problem statement of representing certain family or category in hierarchical fashion. In such case, iteration through XML tree or structured database becomes a challenge. Even parsing is one part of the problem and then representing it in graphical view of that hierarchy pattern.

Note: Here, the challenge is data structure are not hardcoded and any point of time new leaf node or parent node may be added at runtime. Hence having XML structure will be bit challenge as parsing, locating parent node and updating XML data will put additional overhead on programmer.



Approach to be followed:

  • Structure data in desired hierarchical format-Datatable schema.
  • Establish parsing logic. Write recursive Function
  • Bind it to Tree view control.

Important contributing factors are here to create well data table structure and binding it to tree view control.

  • ASP.NET TreeView Control
  • Technology
  • SQL Server 2005

Database Implementation

Create table tbl_Tree_Hierarchy:

</img />

Create Stored procedure ssp_get_hierarchy: This will give Node_ID its child information and level or depth of leaf node or branch it belongs to.The below is the result set of the above stored procedure. The best use of Common table expression in SQL Server 2005 to refer recursive dataset using WITH Clause:

</img />

Recursive Function

Create recursive function to traverse through hierarchical tree data structure. This functionality is developed using ASP.NET 2.0 and the recursive function can be avoided using CSharp .NET 3.5 using LINQ. Using anonymous delegate, we can compare the collection objects with some logical condition. Once the result set is filtered, it can be traversed and can be added as object item to tree view control.

Create HierarchyTrees generic collection which contains Htree objects.

public class HierarchyTrees : List <HierarchyTrees.HTree>
    public class HTree 
        private string m_NodeDescription;
        private int m_UnderParent;
        private int m_LevelDepth;
        private int m_NodeID;
        public int NodeID 
        { get {return m_NodeID;}
            set { m_NodeID=value; }
        public string NodeDescription
            get { return m_NodeDescription; }
            set { m_NodeDescription = value; }
        public int UnderParent
            get { return m_UnderParent; }
            set { m_UnderParent = value; }
        public int LevelDepth
            get { return m_LevelDepth; }
            set { m_LevelDepth = value; }

PopulateTreeview() function will fetch recordset from database and will populate the generic collection tree.

private void PopulateTreeview() {    
     HierarchyTrees hierarchyTrees = new HierarchyTrees();    
     HierarchyTrees.HTree objHTree=null;
     using (SqlConnection connection = new SqlConnection
     (@"Persist Security Info=False;Integrated Security=SSPI;
         using (SqlCommand command = 
         new SqlCommand("SSP_GET_HIERARCHY", connection))     
         {             command.CommandType = System.Data.CommandType.StoredProcedure;
             SqlDataReader reader = command.ExecuteReader
             while (reader.Read())             
                 objHTree=new HierarchyTrees.HTree();      
             objHTree.LevelDepth = int.Parse(reader["LEVEL_DEPTH"].ToString());
             objHTree.NodeID = int.Parse(reader["NODE_ID"].ToString());
             objHTree.UnderParent = int.Parse(reader["UNDER_PARENT"].ToString());
             objHTree.NodeDescription = reader["NODE_DESCRIPTION"].ToString();
     //Iterate through Collections.
     foreach (HierarchyTrees.HTree hTree in hierarchyTrees)     
         //Filter the collection HierarchyTrees based on 
         //Iteration as per object Htree Parent ID 
         HierarchyTrees.HTree parentNode = hierarchyTrees.Find
         (delegate(HierarchyTrees.HTree emp) 
		{ return emp.NodeID == hTree.UnderParent; });
         //If parent node has child then populate the leaf node.
         if (parentNode != null)
             foreach (TreeNode tn in tvHierarchyView.Nodes)
                 //If single child then match Node ID with Parent ID
                 if (tn.Value == parentNode.NodeID.ToString())
                     tn.ChildNodes.Add(new TreeNode
                     (hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));
                 //If Node has multiple child ,
                 //recursively traverse through end child or leaf node.
                 if (tn.ChildNodes.Count > 0)
                     foreach (TreeNode ctn in tn.ChildNodes)
                         RecursiveChild(ctn, parentNode.NodeID.ToString(), hTree);
         //Else add all Node at first level 
             tvHierarchyView.Nodes.Add(new TreeNode
             (hTree.NodeDescription, hTree.NodeID.ToString()));

Create recursive function to traverse through hierarchical tree data structure. This functionality is developed using ASP.NET 2.0 and the recursive function can be avoided using CSharp .NET 3.5 using LINQ. Using anonymous delegate, we can compare the collection objects with some logical condition. Once the result set is filtered, it can be traversed and can be added as object item to tree view control. Create HierarchyTrees generic collection which contains Htree objects.

public void RecursiveChild
(TreeNode tn, string searchValue, HierarchyTrees.HTree hTree)
    if (tn.Value == searchValue)
        tn.ChildNodes.Add(new TreeNode
        (hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));
    if (tn.ChildNodes.Count > 0)
        foreach (TreeNode ctn in tn.ChildNodes)
            RecursiveChild(ctn, searchValue,hTree);


Any ideas, corrections, and suggestions are most welcome.


The below reference is for Winform treeview control and I wrote the above article to make it available for ASP.NET treeview control as well. The important difference between winform and ASP.NET treeview control is FindNode.

In winform treeview control, we have tvHierarchyView.Nodes.Find where it finds a given node criteria and helps us add Htree object item at a given node value and hence one can use LINQ and can get rid of recursive function.

Unlike Winform, ASP.NET treeview control exposes tvHierarchyView.FindNode(XML Address path) which is more applicable for XML data type and hence not much of help.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

santosh poojari
Technical Lead
Australia Australia
Whatsup-->Exploring--> MVC/HTML5/Javascript & Virtualization.......!

You may also be interested in...


Comments and Discussions

QuestionWhat happens when adding & deleting nodes or moving nodes to a new hierarchy level? Pin
senatorsanchez13-Feb-18 9:02
membersenatorsanchez13-Feb-18 9:02 
Questionstore tree view data to database c# Pin
Member 102861815-Sep-14 9:03
memberMember 102861815-Sep-14 9:03 
how to store tree view data to sql database table. I have n number of nodes in tree view and i need to store all of them with there hierarchy.
GeneralVery Nice & Great Concept ... Pin
Soumya Ranjan Maharana30-Dec-13 0:11
memberSoumya Ranjan Maharana30-Dec-13 0:11 
Questionspecify css for nodes Pin
Leo Rajendra Dhakal24-Jan-13 3:51
groupLeo Rajendra Dhakal24-Jan-13 3:51 
QuestionTreeView For C# ASP.NET Pin
Sweetynewb17-Dec-12 21:56
memberSweetynewb17-Dec-12 21:56 
GeneralMy vote of 3 Pin
K.N.V.L.D.L.KUMAR2-Nov-12 2:53
memberK.N.V.L.D.L.KUMAR2-Nov-12 2:53 
QuestionVery good! Pin
Woogie28-Oct-12 17:41
memberWoogie28-Oct-12 17:41 
AnswerRe: Very good! Pin
Member 999935019-Apr-13 13:14
memberMember 999935019-Apr-13 13:14 
GeneralRe: Very good! Pin
Woogie218-Jun-13 15:23
memberWoogie218-Jun-13 15:23 
GeneralMy vote of 5 Pin
Pritesh Aryan30-Jul-12 3:34
memberPritesh Aryan30-Jul-12 3:34 
GeneralGood Article Pin
BusterCoder7-Dec-11 15:00
memberBusterCoder7-Dec-11 15:00 
GeneralMy vote of 5 Pin
Michael Bakker28-Jan-11 2:01
memberMichael Bakker28-Jan-11 2:01 
GeneralMy vote of 5 Pin
satyanshu gupta3-Jan-11 0:09
membersatyanshu gupta3-Jan-11 0:09 
GeneralMy vote of 5 Pin
Gautam Sharma2-Jan-11 19:13
memberGautam Sharma2-Jan-11 19:13 
GeneralMy vote of 4 Pin
SledgeHammer0131-Dec-10 14:12
memberSledgeHammer0131-Dec-10 14:12 
GeneralMy vote of 5 Pin
KrishnaReddy M30-Dec-10 22:02
memberKrishnaReddy M30-Dec-10 22:02 
GeneralGood Article Pin
Member 397829230-Dec-10 20:39
memberMember 397829230-Dec-10 20:39 
GeneralIHierarchyData interface Pin
Mario Majčica30-Dec-10 4:31
professionalMario Majčica30-Dec-10 4:31 
GeneralRe: IHierarchyData interface Pin
santosh poojari30-Dec-10 18:25
membersantosh poojari30-Dec-10 18:25 
GeneralRe: IHierarchyData interface Pin
Mario Majčica31-Dec-10 0:39
professionalMario Majčica31-Dec-10 0:39 
SuggestionRe: IHierarchyData interface Pin
Mario Majčica26-Jan-12 4:07
professionalMario Majčica26-Jan-12 4:07 
Generalnice Pin
Pranay Rana29-Dec-10 21:21
professionalPranay Rana29-Dec-10 21:21 
GeneralRe: nice Pin
santosh poojari29-Dec-10 23:11
membersantosh poojari29-Dec-10 23:11 
GeneralMy vote of 5 Pin
c_paresh29-Dec-10 11:26
memberc_paresh29-Dec-10 11:26 
GeneralRe: My vote of 5 Pin
santosh poojari29-Dec-10 23:11
membersantosh poojari29-Dec-10 23:11 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web05-2016 | 2.8.181116.1 | Last Updated 29 Dec 2010
Article Copyright 2010 by santosh poojari
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid