Anja

Anja

  • NA
  • 15
  • 0

Programmatically select a treeview node and expand the depth

Jun 23 2008 2:46 AM

Hi,

I have a treeview I use as a menu. The treeview works perfect. BUT now I want to make a function where I add a new node to the menu programmatically. (I don't need help to add the new node in the database) I need help for: reload the menu and select the newly added node and expand the treeview to that node. I tried a lot, but nothing works for me.

Said with other words: I need a way to expand the treeview and make a specific node selected

I hope someone here can help me with my problem

My code:

TestMenu.aspx:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:TreeView ID="MenuTree" EnableClientScript="False" runat="server"

ExpandDepth="15" ShowExpandCollapse="False"
ontreenodeexpanded="MenuTree_TreeNodeExpanded"

ontreenodepopulate="MenuTree_TreeNodePopulate"
PathSeparator="/" ontreenodecollapsed="MenuTree_TreeNodeCollapsed">

<NodeStyle CssClass="menulink" />

<SelectedNodeStyle CssClass="menulink" />

</asp:TreeView>



<br /><br /><br />

ID:

<asp:Label ID="lblMenuId" runat="server" Text="Label"></asp:Label>

<br /><br />

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</asp:Content>

TestMenu.aspx.cs:



public partial class TestMenu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //16-06-2008 AS
            //Get the top menu
            try
            {
                DALMenu menu = new DALMenu();
                if (menu.EditGetTopMenu(MenuTree) == Status.Success)
                {
                }
            }
            catch
            { }
        }
    }

    protected void MenuTree_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    {
        if (e.Node.Depth == 0)
        {
            try
            {
                DALMenu submenu = new DALMenu();
                submenu.EditGetSubMenu(e.Node);
            }
            catch
            { }
        }

    }
    protected void MenuTree_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        try
        {
            int key_id = Convert.ToInt32(e.Node.Value);

            lblMenuId.Text = key_id.ToString();

            if (e.Node.Depth == 0)
            {
                TreeView t = (TreeView)sender;

                for (int i = 0; i < t.Nodes.Count; i++)
                {
                    if (t.Nodes[i] != e.Node)
                    {
                        t.Nodes[i].CollapseAll();
                    }
                }
            }
        }
        catch
        {
        }
    }

    protected void MenuTree_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
    {
        try
        {
            int key_id = Convert.ToInt32(e.Node.Value);

            lblMenuId.Text = key_id.ToString();
        }
        catch
        {
        }
    }


    private void ExpandNodes(string valuepath)
    {
        string[] tmp = valuepath.Split('/');
        string tmpValuePath = string.Empty;
        for (int i = 0; i < tmp.Length; i++)
        {

            if (i == 0)
                tmpValuePath = tmp[i];
            else
                tmpValuePath += "/" + tmp[i];

            TreeNodeEventArgs e = new TreeNodeEventArgs(MenuTree.FindNode(tmpValuePath));
            e.Node.ChildNodes.Clear();
            e.Node.PopulateOnDemand = false;
            MenuTree_TreeNodePopulate(MenuTree, e);
            MenuTree.FindNode(tmpValuePath).Expand();
            MenuTree.FindNode(tmpValuePath).Selected = true;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        //In this button I want to create the node (I don't need help for that) AND then
        //Reload the menu and select the newly added node (by expanding the treeview)

        //string top = MenuTree.SelectedNode.ValuePath;
        ExpandNodes("s19//24");
    }
}

Kind regards,
simsen

 


Answers (2)