asp.net TreeView与XML配合使用v1.1
刚我在做Tree view 绑定时自己摸索了一下,网上有人说TreeView绑定数据源,用什么递归绑定啥的,我不想看了,就自己试着写了一个
我是这样做的,如果有什么问题请大神指导,我是菜鸟额..
1:页面TreeView 叫tvFunction
2:新建 adminFunction.xml
<?xml version="1.0" encoding="utf-8" ?> <functions> <function name="商品发布" url="~/page/leaves/leave.aspx"> <subfunction name="添加商品" url="~/page/leaves/leave.aspx"> </subfunction> <subfunction name="添加商品" url="~/page/leaves/leave.aspx"> </subfunction> </function> <function name="留言发布" url="~/page/leaves/leave.aspx"> <subfunction name="添加留言" url="~/page/leaves/leave.aspx"> </subfunction> <subfunction name="修改留言" url="~/page/leaves/leave.aspx"> </subfunction> </function> </functions>
3:页面绑定
/// <summary> /// 初始化功能树结构 /// </summary> private void InitFunction() { XmlDocument xmldoc = new XmlDocument(); string xmlPath = "~/adminFunction.xml"; xmlPath = Server.MapPath(xmlPath); xmldoc.Load(xmlPath); XmlNode root = xmldoc.DocumentElement; foreach (XmlNode node in root.ChildNodes) { //获取父节点的信息显示(轻狂-书生) XmlElement x1 = node as XmlElement; string name = x1.GetAttribute("name"); string url = x1.GetAttribute("url"); TreeNode tn = new TreeNode(); tn.Text = name; tn.NavigateUrl = url; foreach (XmlNode subnode in x1.ChildNodes) { XmlElement subxmlEmt = subnode as XmlElement; string subname = subxmlEmt.GetAttribute("name"); string suburl = subxmlEmt.GetAttribute("url"); TreeNode subtn = new TreeNode(); subtn.Text = subname; subtn.NavigateUrl = suburl; tn.ChildNodes.Add(subtn); } tvFunction.Nodes.Add(tn); } }
4:显示效果
感觉效果还行,请问我这样做好么?有什么更好的方式么?请指教,谢谢了..
----修改后的版本
根据大神们的指导,我晚上回来试了下递归(全手打)
方法如下
1:XML改为
<?xml version="1.0" encoding="utf-8" ?> <functions> <function name="商品发布" url="~/page/leaves/leave.aspx"> <subfunction name="添加商品" url="~/page/leaves/leave.aspx"> <subfunction1 name="11" url="~/page/leaves/leave.aspx"> <subfunction2 name="21" url="~/page/leaves/leave.aspx"> </subfunction2> <subfunction2 name="22" url="~/page/leaves/leave.aspx"> </subfunction2> </subfunction1> <subfunction1 name="12" url="~/page/leaves/leave.aspx"> </subfunction1> </subfunction> <subfunction name="添加商品" url="~/page/leaves/leave.aspx"> </subfunction> </function> <function name="留言发布" url="~/page/leaves/leave.aspx"> <subfunction name="添加留言" url="~/page/leaves/leave.aspx"> </subfunction> <subfunction name="修改留言" url="~/page/leaves/leave.aspx"> </subfunction> </function> </functions>
2:后台代码
/// <summary> /// 初始化功能树结构 /// </summary> private void InitFunction() { XmlDocument xmldoc = new XmlDocument(); string xmlPath = "~/adminFunction.xml"; xmlPath = Server.MapPath(xmlPath); xmldoc.Load(xmlPath); XmlNode root = xmldoc.DocumentElement; tvFunction.Nodes.Add(CreateNode(root,new TreeNode())); } /// <summary> /// 递归方法产生树(create by 轻狂书生) /// </summary> /// <param name="root">根节点</param> /// <param name="tn">根节点对应的树节点</param> /// <returns></returns> private TreeNode CreateNode(XmlNode root, TreeNode tn) { foreach (XmlNode node in root.ChildNodes) { XmlElement subxmlEmt = node as XmlElement; string subname = subxmlEmt.GetAttribute("name"); string suburl = subxmlEmt.GetAttribute("url"); TreeNode subtn = new TreeNode(); subtn.Text = subname; subtn.NavigateUrl = suburl; if (node.HasChildNodes) { subtn.ChildNodes.Add(CreateNode(node,subtn)); } tn.ChildNodes.Add(subtn); } return tn; }
3:产生的效果图如下
4:为了去除根节点的显示,好像只能用个循环了,修改如下
/// <summary> /// 初始化功能树结构 /// </summary> private void InitFunction() { XmlDocument xmldoc = new XmlDocument(); string xmlPath = "~/adminFunction.xml"; xmlPath = Server.MapPath(xmlPath); xmldoc.Load(xmlPath); XmlNode root = xmldoc.DocumentElement; foreach (XmlNode node in root.ChildNodes) { XmlElement subxmlEmt = node as XmlElement; string subname = subxmlEmt.GetAttribute("name"); string suburl = subxmlEmt.GetAttribute("url"); TreeNode subtn = new TreeNode(); subtn.Text = subname; subtn.NavigateUrl = suburl; tvFunction.Nodes.Add(CreateNode(node, subtn)); } }
5:显示效果如下
达到了预期的效果哦,呵呵,请问方法有什么可以改进的么?请大神各抒己见..test类别