none
如何生成树形框效率好一些? RRS feed

  • 问题

  • 请问如何生成树形框更高效啊?

    如果有一个XML树,不管它有多少级子项,如何 无限 级递归生成树形框?

    求实例····

    2012年2月27日 17:24

答案

  • 自定义一个方法,根据节点去判断是否还有子节点,如果有添加到TreeView控件的相关父节点下。

    这里有个链接供你参考:

    http://support.microsoft.com/kb/317597

    我摘要里面的主要代码,方便你查看:

       private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    // 1. 加载XML文档
                    XmlDocument dom = new XmlDocument();
                    dom.Load(@"C:\Users\v-zyue\Desktop\as.XML");
    
                    // 2. 先清空TreeView 的节点
                    treeView1.Nodes.Clear();
                    treeView1.Nodes.Add(new TreeNode(dom.DocumentElement.Name));
                    TreeNode tNode = new TreeNode();
                    tNode = treeView1.Nodes[0];
    
                    // 3. 添加XML的节点到TreeView中。
                    AddNode(dom.DocumentElement, tNode);
                    treeView1.ExpandAll();
                }
                catch (XmlException xmlEx)
                {
                    MessageBox.Show(xmlEx.Message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    				
            }
            /// <summary>
            /// 自定义的方法,遍历XML文档的节点
            /// </summary>
            /// <param name="XML的节点"></param>
            /// <param name="TreeView 的节点"></param>
             private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
          {
             XmlNode xNode;
             TreeNode tNode;
             XmlNodeList nodeList;
             int i;
    
             // 循环遍历给定节点的所有子节点
             // 添加XML的节点到TreeView节点。
             if (inXmlNode.HasChildNodes)
             {
                nodeList = inXmlNode.ChildNodes;
                for(i = 0; i<=nodeList.Count - 1; i++)
                {
                   xNode = inXmlNode.ChildNodes[i];
                   inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
                   tNode = inTreeNode.Nodes[i];
                   AddNode(xNode, tNode);
                }
             }
             else
             {
               // 如果给定的节点没有子节点,那么就将该节点的名字和相关的属性值赋值给TreeView 节点
                inTreeNode.Text = (inXmlNode.OuterXml).Trim();
             }
          }                  

    希望能帮得到您。

    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年2月29日 5:44
    版主
  • dear

    当不知子结构有几层时,可以使用递廻


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年2月29日 7:37

全部回复

  • 自定义一个方法,根据节点去判断是否还有子节点,如果有添加到TreeView控件的相关父节点下。

    这里有个链接供你参考:

    http://support.microsoft.com/kb/317597

    我摘要里面的主要代码,方便你查看:

       private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    // 1. 加载XML文档
                    XmlDocument dom = new XmlDocument();
                    dom.Load(@"C:\Users\v-zyue\Desktop\as.XML");
    
                    // 2. 先清空TreeView 的节点
                    treeView1.Nodes.Clear();
                    treeView1.Nodes.Add(new TreeNode(dom.DocumentElement.Name));
                    TreeNode tNode = new TreeNode();
                    tNode = treeView1.Nodes[0];
    
                    // 3. 添加XML的节点到TreeView中。
                    AddNode(dom.DocumentElement, tNode);
                    treeView1.ExpandAll();
                }
                catch (XmlException xmlEx)
                {
                    MessageBox.Show(xmlEx.Message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    				
            }
            /// <summary>
            /// 自定义的方法,遍历XML文档的节点
            /// </summary>
            /// <param name="XML的节点"></param>
            /// <param name="TreeView 的节点"></param>
             private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
          {
             XmlNode xNode;
             TreeNode tNode;
             XmlNodeList nodeList;
             int i;
    
             // 循环遍历给定节点的所有子节点
             // 添加XML的节点到TreeView节点。
             if (inXmlNode.HasChildNodes)
             {
                nodeList = inXmlNode.ChildNodes;
                for(i = 0; i<=nodeList.Count - 1; i++)
                {
                   xNode = inXmlNode.ChildNodes[i];
                   inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
                   tNode = inTreeNode.Nodes[i];
                   AddNode(xNode, tNode);
                }
             }
             else
             {
               // 如果给定的节点没有子节点,那么就将该节点的名字和相关的属性值赋值给TreeView 节点
                inTreeNode.Text = (inXmlNode.OuterXml).Trim();
             }
          }                  

    希望能帮得到您。

    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年2月29日 5:44
    版主
  • dear

    当不知子结构有几层时,可以使用递廻


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年2月29日 7:37