Hi shbz.cool,
Refer the below sample. I have used table structure like below data.
NodeID |
ParentID |
NodeText |
0 |
-1 |
India |
1 |
-1 |
Pakistan |
2 |
1 |
Lahore |
3 |
0 |
Mumbai |
4 |
3 |
Andheri |
5 |
3 |
Goregaon |
6 |
0 |
Bangalore |
7 |
0 |
Hyderabad |
8 |
6 |
Marathali |
9 |
6 |
JP Nagar |
10 |
7 |
Ameerpet |
11 |
4 |
Andheri East |
12 |
4 |
Andheri West |
13 |
11 |
Poonam Nagar |
14 |
11 |
PMGP Colony |
15 |
1 |
Karachi |
15 |
1 |
Rawalpindi |
16 |
5 |
Goregaon East |
17 |
5 |
Goregaon West |
18 |
12 |
Andheri Market |
HTML
<asp:TreeView ID="TreeView1" runat="server">
</asp:TreeView>
C#
DataTable dtSource = null;
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("NodeId", typeof(int)), new DataColumn("ParentId", typeof(int)), new DataColumn("NodeText") });
dt.Rows.Add(0, -1, "India");
dt.Rows.Add(1, -1, "Pakistan");
dt.Rows.Add(2, 1, "Lahore");
dt.Rows.Add(3, 0, "Mumbai");
dt.Rows.Add(4, 3, "Andheri");
dt.Rows.Add(5, 3, "Goregaon");
dt.Rows.Add(6, 0, "Bangalore");
dt.Rows.Add(7, 0, "Hyderabad");
dt.Rows.Add(8, 6, "Marathali");
dt.Rows.Add(9, 6, "JP Nagar");
dt.Rows.Add(10, 7, "Ameerpet");
dt.Rows.Add(11, 4, "Andheri East");
dt.Rows.Add(12, 4, "Andheri West");
dt.Rows.Add(13, 11, "Poonam Nagar");
dt.Rows.Add(14, 11, "PMGP Colony");
dt.Rows.Add(15, 1, "Karachi");
dt.Rows.Add(15, 1, "Rawalpindi");
dt.Rows.Add(16, 5, "Goregaon East");
dt.Rows.Add(17, 5, "Goregaon West");
dt.Rows.Add(18, 12, "Andheri Market");
return dt;
}
protected void Page_Load(object sender, System.EventArgs e)
{
dtSource = GetData();
DataTable dt = GetChildData(-1);
foreach (DataRow dr in dt.Rows)
{
TreeNode parentNode = new TreeNode();
parentNode.Text = dr["NodeText"].ToString();
parentNode.Value = dr["NodeID"].ToString();
AddNodes(ref parentNode);
TreeView1.Nodes.Add(parentNode);
}
}
private void AddNodes(ref TreeNode node)
{
DataTable dt = GetChildData(Convert.ToInt32(node.Value));
foreach (DataRow row in dt.Rows)
{
TreeNode childNode = new TreeNode();
childNode.Value = row["NodeID"].ToString();
childNode.Text = row["NodeText"].ToString();
AddNodes(ref childNode);
node.ChildNodes.Add(childNode);
}
}
public DataTable GetChildData(int parentId)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("NodeId", typeof(int)), new DataColumn("ParentId", typeof(int)), new DataColumn("NodeText") });
foreach (DataRow dr in dtSource.Rows)
{
if (dr[1].ToString() != parentId.ToString())
{
continue;
}
DataRow row = dt.NewRow();
row["NodeId"] = dr["NodeId"];
row["ParentId"] = dr["ParentId"];
row["NodeText"] = dr["NodeText"];
dt.Rows.Add(row);
}
return dt;
}
VB.Net
Private dtSource As DataTable = Nothing
Private Function GetData() As DataTable
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn() {New DataColumn("NodeId", GetType(Integer)), New DataColumn("ParentId", GetType(Integer)), New DataColumn("NodeText")})
dt.Rows.Add(0, -1, "India")
dt.Rows.Add(1, -1, "Pakistan")
dt.Rows.Add(2, 1, "Lahore")
dt.Rows.Add(3, 0, "Mumbai")
dt.Rows.Add(4, 3, "Andheri")
dt.Rows.Add(5, 3, "Goregaon")
dt.Rows.Add(6, 0, "Bangalore")
dt.Rows.Add(7, 0, "Hyderabad")
dt.Rows.Add(8, 6, "Marathali")
dt.Rows.Add(9, 6, "JP Nagar")
dt.Rows.Add(10, 7, "Ameerpet")
dt.Rows.Add(11, 4, "Andheri East")
dt.Rows.Add(12, 4, "Andheri West")
dt.Rows.Add(13, 11, "Poonam Nagar")
dt.Rows.Add(14, 11, "PMGP Colony")
dt.Rows.Add(15, 1, "Karachi")
dt.Rows.Add(15, 1, "Rawalpindi")
dt.Rows.Add(16, 5, "Goregaon East")
dt.Rows.Add(17, 5, "Goregaon West")
dt.Rows.Add(18, 12, "Andheri Market")
Return dt
End Function
Protected Sub Page_Load(sender As Object, e As System.EventArgs)
dtSource = GetData()
Dim dt As DataTable = GetChildData(-1)
For Each dr As DataRow In dt.Rows
Dim parentNode As New TreeNode()
parentNode.Text = dr("NodeText").ToString()
parentNode.Value = dr("NodeID").ToString()
AddNodes(parentNode)
TreeView1.Nodes.Add(parentNode)
Next
End Sub
Private Sub AddNodes(ByRef node As TreeNode)
Dim dt As DataTable = GetChildData(Convert.ToInt32(node.Value))
For Each row As DataRow In dt.Rows
Dim childNode As New TreeNode()
childNode.Value = row("NodeID").ToString()
childNode.Text = row("NodeText").ToString()
AddNodes(childNode)
node.ChildNodes.Add(childNode)
Next
End Sub
Public Function GetChildData(parentId As Integer) As DataTable
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn() {New DataColumn("NodeId", GetType(Integer)), New DataColumn("ParentId", GetType(Integer)), New DataColumn("NodeText")})
For Each dr As DataRow In dtSource.Rows
If dr(1).ToString() <> parentId.ToString() Then
Continue For
End If
Dim row As DataRow = dt.NewRow()
row("NodeId") = dr("NodeId")
row("ParentId") = dr("ParentId")
row("NodeText") = dr("NodeText")
dt.Rows.Add(row)
Next
Return dt
End Function
Screenshot