Click here to Skip to main content
15,884,298 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a treeview that is generated with some data from a datatable.

I want to find a node and show them.

I can find... but i can't show.

Where is my problem?

Here is all my code...

C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string SERVER_NAME = Request.ServerVariables["SERVER_NAME"].ToString();
        MindResources._MetodosEstaticos.server = SERVER_NAME;
        BusinessLayer._MetodosEstaticos.setServer(SERVER_NAME);
        DataTable dtMenu = BusinessLayer._MetodosEstaticos.GetMenuTree();
        loadTreeMenu(tvMenu, dtMenu);
        tvMenu.CollapseAll();
    }
}

public TreeView loadTreeMenu(TreeView tvMenu, DataTable dtMenu)
{
    if (dtMenu.Rows.Count > 0)
    {
        foreach (DataRow menu in dtMenu.Select("Parent_Id=179"))
        {
            TreeNode ParentNode = new TreeNode();
            ParentNode.Text = menu["MenuName"].ToString();
            tvMenu.Nodes.Add(ParentNode);
            loadTreeSubMenu(ref ParentNode, int.Parse(menu["MenuCode"].ToString()), dtMenu);
        }
    }
    return tvMenu;
}

private void loadTreeSubMenu(ref TreeNode ParentNode, int ParentId, DataTable dtMenu)
{
    DataRow[] childs = dtMenu.Select("Parent_Id='" + ParentId + "'");
    foreach (DataRow dRow in childs)
    {
        TreeNode child = new TreeNode();
        child.Text = dRow["MenuName"].ToString();
        child.Value = dRow["MenuCode"].ToString();
        ParentNode.ChildNodes.Add(child);
        //Recursion Call
        loadTreeSubMenu(ref child, int.Parse(dRow["MenuCode"].ToString()), dtMenu);
    }
}

private void btnFind_Click(object sender, EventArgs e)
{
    //Usage
    TreeNode itemNode = null;
    foreach (TreeNode node in tvMenu.Nodes)
    {
        itemNode = FromID(tbSearch.Text, node);
        if (itemNode != null) break;
    }
}

public TreeNode FromID(string itemId, TreeNode rootNode)
{
    foreach (TreeNode node in rootNode.ChildNodes)
    {
        if (node.Text.Equals(itemId)) return node;
        TreeNode next = FromID(itemId, node);
        if (next != null) return next;
    }
    return null;
}

protected void btnProcurar_Click(object sender, EventArgs e)
{
    //Usage
    btnProcurar.Text = "Search";
    TreeNode itemNode = null;
    foreach (TreeNode node in tvMenu.Nodes)
    {
        itemNode = FromID(tbSearch.Text, node);
        if (itemNode != null)
        {
            itemNode.Selected = true;
            tvMenu.SelectedNode.Expand();
            btnProcurar.Text = "Yes!!!! i finally Found!!!!!";
            tvMenu.FindNode(itemNode.ValuePath);
            break;
        }
    }

}


ASP.NET
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="HRC.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head  runat="server">
    <title></title>
</head>
<body>
    <form id="form1"  runat="server">
    <div>
        <asp:TextBox runat="server" id="tbSearch"/><asp:Button Text="Procurar" id="btnProcurar" runat="server" onclick="btnProcurar_Click" />
        <asp:TreeView runat="server" ID="tvMenu" ExpandDepth="1"        
            NodeStyle-CssClass="treeNode"
            RootNodeStyle-CssClass="rootNode"
            LeafNodeStyle-CssClass="leafNode" ShowLines="true"
            >
            <LeafNodeStyle CssClass="leafNode" />
            <NodeStyle CssClass="treeNode" />
            <RootNodeStyle CssClass="rootNode" />
            <SelectedNodeStyle BackColor="Blue" BorderColor="Black" BorderStyle="Solid" 
                BorderWidth="2px" />
            

        </asp:TreeView>
    </div>
    </form>
</body>
</html>
Posted

1 solution

Your problem, I suppose, is in the method btnFind_Click(). You're declaring an object of type TreeNode, eventually assigning something to it. But then, the method exits and therefore throws away your precious TreeNode instead of displaying it.

Put the displaying code here:
C#
private void btnFind_Click(object sender, EventArgs e)
{
    //Usage
    TreeNode itemNode = null;
    foreach (TreeNode node in tvMenu.Nodes)
    {
        itemNode = FromID(tbSearch.Text, node);
        if (itemNode != null) break;
    }

    // Display the node just found.
    if( itemNode != null)
    {
        DisplayTreeNodeInfo(ItemNode);
    }
}
Of course, You will have to write a method DisplayTreeNodeInfo() suitable exactly for your needs.
 
Share this answer
 
Comments
Member 9639742 20-Mar-14 5:56am    
Yes.
My problem is how could i do that method?
lukeer 20-Mar-14 6:03am    
What information is in that TreeNode that you want to display?
BillWoodruff 20-Mar-14 7:38am    
+5

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