I am currently using an asp.net menu control to load from a table parent/child items. The problem I am having is that if the child has another child. My code is kindof static in that sense and I can’t seem to find a better or “the” way to do it. I have seen sitemap as datasources but i don’t need a sitemap and feel that would just be overkill for what I need to achieve.
foreach (ClassName option in list)
{
MenuItem module = new MenuItem(option.Description.ToLower(), "", "", option.Url + "?option=" + option.Optionid);
module.Selectable = true;
navigation.Items.Add(module);
//this is my second level
foreach (ClassName child in listfromparent(option.Optionid))
{
MenuItem childmenu = new MenuItem(child.Description.ToLower(), "", "", child.Url + "?option=" + child.Optionid);
module.ChildItems.Add(childmenu);
}
}
as you can see this works but for 2 levels 🙁
and of course i could put another childlevel inside child to create the 3rd level but what if there is a 4th, 5th? So that’s why I need it to do it itself. I noticed treeview has onpopulate but apparently Menu doesn’t. Thanks in advance.
Here’s one way you could do it.
Maybe you could skip that middle step and map the adjacency list straight to a tree of MenuItems, maybe with some extension methods on MenuItem.
But anyway…
Default.aspx
Default.aspx.cs
MenuNode.cs