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类别

posted @ 2013-10-27 22:33  清风君  阅读(1263)  评论(3编辑  收藏  举报