Click here to Skip to main content
15,887,821 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
****THIS IS A ASP.NET Web APPLICATION NOT WINDOWS FORMS*************
Problem/ Question: To search a child node anywhere in the treeview. I need to type a Node name in the textbox and search the node name in the Treeview and highlight the node name on finding. I don’t how to do it. I tried for sometime but didn’t find the solutions.So, can any body give some idea ?
FYI : I have created a ASP.NET Web application treeview to populate Parent nodes and corresponding child nodes for each Parent Node. The user can add any number of child nodes in the treeview.
Given below is the code that I have done till now for populating the treeview for any number of childs and child levels.
Code behind file :
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)// Checks if the page is loaded first time
        {
            PopulateRootLevel(); // Populates the root or parent 
        }        
    }
public void PopulateRootLevel()
{
SqlConnection objConn = new SqlConnection(@"");
SqlCommand objCommand = new SqlCommand(@"select dp.CustomerName,dh.RowId,(select count(*) FROM DistributorHierarchy WHERE ParentID=dh.RowId) childnodecount FROM DistributorHierarchy dh INNER JOIN DistributorProfile dp ON dh.CustomerNumber = dp.CustomerNumber where dh.ParentID = 0 ", objConn);
SqlDataAdapter da = new SqlDataAdapter(objCommand);
DataTable dt = new DataTable();
da.Fill(dt);
PopulateNodes(dt, TreeView1.Nodes);                 
}
public void PopulateSubLevel(int ParentID, TreeNode parentNode)
{
SqlConnection objConn = new SqlConnection();
SqlCommand objCommand = new SqlCommand(@"select dp.CustomerName,dh.RowId,(select count(*) FROM DistributorHierarchy WHERE ParentID=dh.RowId) childnodecount  FROM DistributorHierarchy dh INNER JOIN DistributorProfile dp ON dh.CustomerNumber = dp.CustomerNumber where dh.ParentID=@ParentID", objConn);
objCommand.Parameters.Add("@ParentID", SqlDbType.Int).Value = ParentID;
SqlDataAdapter da = new SqlDataAdapter(objCommand);
DataTable dt = new DataTable();
da.Fill(dt);
PopulateNodes(dt, parentNode.ChildNodes);
}
public void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
}
public void PopulateNodes(DataTable dt, TreeNodeCollection nodes)
{
        foreach (DataRow dr in dt.Rows)
        {
            TreeNode tn = new TreeNode();
            tn.Text = dr["CustomerName"].ToString();
            tn.Value = dr["RowId"].ToString();
            nodes.Add(tn);
            tn.PopulateOnDemand = ((int)(dr["childnodecount"]) > 0);
        }
}    

}
Posted
Updated 7-Apr-10 2:45am
v2

quickest way is a

///Pass into this the base Node.
TreeNode recursiveFind(TreeNode Node, obj yourCritera){

TreeNode HoldTN = null;
 foreach(TreeNode tn in Node.Children)
{
      if([YOUR SEARCH CRITERA]){
         return tn;
      }
      else{
          HoldT = recursive(tn);
          if(HoldTN!=null){return HoldTN;}
      }
      
}
return null;

}



As For Highlighting, I believe you can set this using the Node Background...


The above will work, however navigating the nodes will become sluggish when you start getting a LARGE number of nodes with children(as opposed to a low number of Branchings to a high number of nodes)

may want to consider an addressing approach:
for a tree that is


a{b{d,e}c{f,g}}

f would have the address 0.1.0; this works very well when you want to do more complicated navigational tricks, and also simplifies the code when you want to get a node:
GetNode(NodeAddress Address){}//recursive get
 
Share this answer
 
Following is code used by me to highlight selected now in tree view

#region code done for selecting node by pranay rana
                    string filename = this.Request.FilePath.ToString().Substring(this.Request.FilePath.ToString().LastIndexOf(@"/") + 1);

                    //MyMembershipProvider _MyMembershipProvider = new MyMembershipProvider();
                    DataSet menu = _MyMembershipProvider.GetMenuByFileName(filename);
                    if (menu.Tables[0].Rows.Count == 1)
                    {
                        string valpath = menu.Tables[0].Rows[0]["Mnu_Parent_Name"].ToString() + @"/" +
                                                menu.Tables[0].Rows[0]["Mnu_Pkey"].ToString();
                        if (MenuTree.FindNode(valpath) != null)
                        {
                            MenuTree.FindNode(valpath).Selected = true;
                        }
                    }
                  #endregion code done for selecting node by pranay rana
 
Share this answer
 
Comments
Member 9364222 10-Sep-12 23:45pm    
I have created a web page with a textbox and treeview control.when i type the node name in the text box it should be highlighted in the treeview. Is there any way to do this..

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900