首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

根据数据库的值,加载XML的数据到TreeView解决方案

2012-02-04 
根据数据库的值,加载XML的数据到TreeViewC# codeRoot IDOSMS node IDSMCG Text公告管理 Image

根据数据库的值,加载XML的数据到TreeView

C# code
<Root ID="OSMS" >    <node ID="SMCG" Text="公告管理" ImageUrl="images/info.gif" Expanded="true" src="#">      <node ID="CGXXGL" Text="发部公告" ImageUrl="images/info.gif" src="Public Notice/PublicNotice_Add.aspx" />      <node ID="XSXXGL" Text="删除公告" ImageUrl="images/info.gif" src="Public Notice/PublicNotice_Del.aspx" />      <node ID="XSXXGL" Text="编辑公告" ImageUrl="images/info.gif" src="Public Notice/PublicNoticeEdit.aspx" />      <node ID="XSXXGL" Text="查询公告" ImageUrl="images/info.gif" src="Public Notice/PublicNoticeView.aspx" />    <node>  [code=C#]
[code=C#][/code]</Root>
[/code]

比如我数据库中取出来的值是和Root ID ="OSMS"的ID值一样,就把Note节点的所有数据加载到TreeView这个
怎么实现啊!
下面是目前所实现代码,但我还是认为里面少了一个调用方法,不知写哪里好,请大家给你看看
C# code
 
private void BuildTree()
        {
                      tree_fromXML(Server.MapPath("ManageTree.xml"));
        }

        private void tree_fromXML(string XMLpath)
        {
            System.Xml.XmlDocument document = new System.Xml.XmlDataDocument();
            document.Load(XMLpath);  //xml文件加载到内存
            Build_tree(document.DocumentElement, MyTreeView.Nodes);
        }

        private void Build_tree(System.Xml.XmlNode document, TreeNodeCollection nodes)
        {
            foreach (System.Xml.XmlNode node in document.ChildNodes)
            {
                if (node.Attributes["ID"].Value=="OSMS")
                {
                    if (node.FirstChild.Attributes["ID"].Value == "SMCG")
                    {
                        TreeNode new_child = new TreeNode();
                        new_child.Text = node.FirstChild.Attributes["Text"].Value;
                        if (node.FirstChild.Attributes["ImageUrl"] != null && node.FirstChild.Attributes["ImageUrl"].Value != "")
                            new_child.ImageUrl = node.FirstChild.Attributes["ImageUrl"].Value;
                        if (node.FirstChild.Attributes["src"].Value.Trim() != "#")
                        {
                            //new_child.Target = "frameColumn";
                            new_child.NavigateUrl = node.FirstChild.Attributes["src"].Value;
                        }
                        else


                        {
                            new_child.SelectAction = TreeNodeSelectAction.Expand;
                        }
                        new_child.Value = node.FirstChild.Attributes["ID"].Value;
                        nodes.Add(new_child);
                        Build_tree(node, new_child.ChildNodes);
                    }
                }
            }
        }



[解决办法]
最后那句是要递归吗?
我觉得一个循环就够了吧


第一步 从XML中找到符合条件的Root ID,清空Treeview 
第二步 遍历这个符合条件的数据块 找到node ID="SMCG"作为父节点
第三步 找到这个数据块中的node ID="XSXXGL" 作为node ID="SMCG"的子节点
然后TreeView1.Nodes.Add(Tnode)

[解决办法]
转成C#(未调试,不知道对不对)
C# code
    DataTable dt = new DataTable();     dt = db.BindTree(DDList_GroupName.Text);     //根据选择的组来重新生成树,返回的是一个datatable     if (dt == null | dt.Rows.Count == 0) return;     TreeView1.Nodes.Clear();     int i = 0;     int j = 0;     for (i = 0; i <= dt.Rows.Count - 1; i++) {         //为0就是跟节点         if (dt.Rows(i)("MenuLV") == 0) {             TreeNode Tnode = new TreeNode();             Tnode.Text = dt.Rows(i)("MenuName").ToString.Trim;             //根节点的名称(比如公告管理)             for (j = 0; j <= dt.Rows.Count - 1; j++) {                 if (j != i) {                     //是否添加子节点的一些条件                     if (string.Equals(dt.Rows(j)("MenuFather"), dt.Rows(i)("MenuName")) & (int)dt.Rows(j)("MenuLV") == 1 & (bool)dt.Rows(j)("MenuShow") == true) {                         TreeNode Tnode_Child = new TreeNode();                         //定义个新的TreeNode                         Tnode_Child.Text = dt.Rows(j)("MenuName");                         Tnode_Child.Value = dt.Rows(j)("MenuAddress").ToString.Trim;                         Tnode_Child.Target = dt.Rows(j)("MenuTarget").ToString.Trim;                         Tnode.ChildNodes.Add(Tnode_Child);                         Tnode_Child = null;                     }                 }             }             TreeView1.Nodes.Add(Tnode);             //绑定到Treeview上             Tnode = null;         }     }     //循环完成后Treeview也就生成完毕了     dt.Dispose();     TreeView1.ExpandAll();
[解决办法]

热点排行