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