asp.net数据绑定多级菜单我目前正在使用asp.net菜单控件从表parent/child加载。我遇到的问题是如果孩子有另一个孩子。我的代码是静态的,因为我似乎找不到更好或“更多”的方法来做到这一点。我已经将站点地图视为数据源,但我不需要站点地图,并且觉得它对我需要实现的目标来说太过分了。foreach(列表中的ClassName选项){MenuItemmodule=newMenuItem(option.Description.ToLower(),"","",option.Url+"?option="+option.Optionid);module.Selectable=true;导航.Items.Add(模块);//这是我的第二级foreach(ClassNamechildinlistfromparent(option.Optionid)){MenuItemchildmenu=newMenuItem(child.Description.ToLower(),"","",child.Url+"?option="+child.Optionid);module.ChildItems.Add(childmenu);}}如您所见但有2个级别:(当然我可以将另一个子级别放入子级别以创建级别3但是如果有第4个、第5个怎么办?所以这就是为什么我需要它自己做。我注意到树视图有人口,但显然菜单没有。提前致谢。这是你如何做到这一点的一种方法。也许你可以跳过那个中间步骤并将邻接列表直接映射到MenuItems树,也许使用一些扩展方法在菜单项上。但无论如何...Default.aspx的默认Default.aspx.csusingSystem;使用System.Web;使用System.Web.UI;使用System.Web.UI.WebControls;使用系统数据;使用System.Collections.Generic;namespaceMenuTreeDemo{publicpartialclassDefault:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){MenuNoderoot=ConvertTableToTree(GetTreeTable());foreach(MenuNodetopLevelNodeinroot.Children){MyMenu.Items.Add(topLevelNode.ToMenuItem());//访问树中的所有节点。}}}//菜单树作为表中的邻接列表。staticDataTableGetTreeTable(){DataTable表=newDataTable();table.Columns.Add("Id",typeof(int));table.Columns.Add("描述",typeof(string));table.Columns.Add("Url",typeof(string));table.Columns.Add("ParentId",typeof(int));table.Rows.Add(1,"TopMenu1","/foo.html",0);table.Rows.Add(2,"SubMenu1.1","/baz.html",1);table.Rows.Add(3,"子菜单1.2","/barry.html",1);table.Rows.Add(4,"SubMenu1.2.1","/skeet.html",3);table.Rows.Add(5,"TopMenu2","/bar.html",0);table.Rows.Add(6,"TopMenu3","/bar.html",0);table.Rows.Add(7,"SubMenu3.1","/ack.html",6);returntable;}//参见例如http://stackoverflow.com/questions/2654627/most-efficient-way-of-creating-tree-from-adjacency-list//假设表是有序的。staticMenuNodeConvertTableToTree(DataTabletable){varmap=newDictionary();map[0]=newMenuNode(){Id=0};//根节点foreach(DataRowrowintable.Rows){intnodeId=int.Parse(row["Id"].ToString());intparentId=int.Parse(row["ParentId"].ToString());MenuNodenewNode=MenuNodeFromDataRow(row);map[parentId].Children.Add(newNode);map[nodeId]=newNode;}returnmap[0];//根节点}staticMenuNodeMenuNodeFromDataRow(DataRowrow){intnodeId=int.Parse(row["Id"].ToString());intparentId=int.Parse(row["ParentId"].ToString());字符串描述=row["Description"].ToString();stringurl=row["Url"].ToString();returnnewMenuNode(){Id=nodeId,ParentId=parentId,Description=description,Url=url};}}}菜单节点。以上就是C#学习教程:asp.net数据绑定菜单多级分享的全部内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——usingSystem;使用System.Collections.Generic;使用System.Web.UI.WebControls;命名空间MenuTreeDemo{publicclassMenuNode{publicintId{get;set;}publicintParentId{get;set;}publicstringDescription{get;set;;set;}publicListChildren{get;set;}publicMenuNode(){Children=newList();}//会访问所有后代并将它们变成菜单项publicMenuItemToMenuItem(){MenuItemitem=newMenuItem(说明){NavigateUrl=Url};foreach(MenuNodechildinChildren){item.ChildItems.Add(child.ToMenuItem());}returnitem;}}}本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
