• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 976
  • Last Modified:

how to load child nodes of tree view when parent node is selected

I have  web page and this web page has one tree view control under an update panel.
now right now i am loading all the nodes at once. but this makes the page really slow as there are tons of records in the database from where tree view is picking data.

I want to know how can i load the child nodes only when the parent node is selected.

0
ziorrinfotech
Asked:
ziorrinfotech
1 Solution
 
tiagosalgadoCommented:
Ok, so check this code and adapt it to your own propose...
<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel runat="server" ID="up1">
        <ContentTemplate>
            <asp:TreeView ID="TreeView1" runat="server" 
                onselectednodechanged="TreeView1_SelectedNodeChanged">
            </asp:TreeView>    
        </ContentTemplate>
    </asp:UpdatePanel>
 
======================= CODE BEHIND =========================
 
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetParentNodes();
            }
        }
 
        protected void GetParentNodes()
        {
            using (SqlConnection conn = new SqlConnection("YOUR_CONNECTIONSTRING_HERE"))
            {
                
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM ParentNodes",conn))
                {
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        TreeView1.Nodes.Add(new TreeNode(dr["node"].ToString(), dr["id"].ToString()));
                    }
                    
                }
            }
        }
 
        protected void GetChildNodesFromParent(TreeNode ParentNode)
        {
            using (SqlConnection conn = new SqlConnection("YOUR_CONNECTIONSTRING_HERE"))
            {
 
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM ChildNodes WHERE parent_id = @id", conn))
                {
                    cmd.Parameters.Add("@id", SqlDbType.Int, 4).Value = int.Parse(ParentNode.Value);
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        TreeView1.SelectedNode.ChildNodes.Add(new TreeNode(dr["node"].ToString(), dr["id"].ToString()));
                    }
 
                }
            }
        }
 
        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            GetChildNodesFromParent(TreeView1.SelectedNode);
        }

Open in new window

0
 
ziorrinfotechAuthor Commented:
this code works, but what is happening now is when the parent nodes are loaded initially, there is no expand icon next to it. i want to have an expand icon next to the parent node so that the users know that there are child nodes below the particular parent node, if any.
0

Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now