当前位置:编程学习 > ASP.NET> 正文

treeview绑定xml

时间:2014-5-16类别:编程学习

treeview绑定xml

treeview绑定xml

treeview绑定xml数据的方式

 

一、XmlDataSource数据源方式

XML文档的访问由XmlDataSource控件来完成,从XmlDataSource控件的DataFile属性中指定XML文档路径,然后在TreeView控件中设置与XML文档中的节点的对应关系。

 

实现步骤

1、XMLFile。xml文件

  •  
  • XML 代码   复制
  • 
    <?xml version="1.0" encoding="utf-8" ?>
    <contact name="联系人">
      <genre name="华南地区">
        <person Text="负责人">
          <name>张三</name>
          <sex></sex>
          <age>25</age>
          <address>广州市黄浦区</address>
        </person>
        <person Text="负责人">
          <name>李四</name>
          <sex></sex>
          <age>28</age>
          <address>佛山市南海区</address>
        </person>
      </genre>
      <genre name="华北地区">
        <person Text="负责人">
          <name>王五</name>
          <sex></sex>
          <age>30</age>
          <address>北京市海淀区</address>
        </person>
      </genre>
    </contact>
    
    		
  •  

    2、TreeView控件和XmlDataSource控件

    从工具箱选择TreeView控件和XmlDataSource控件设计页面,把XmlDataSource控件DataFile属性设置成“~/App_Data/XMLFile。xml”,并把TreeView控件的DataSourceID属性设为“XmlDataSource1”。

  •  
  • HTML 代码   复制
  • 
    <html>
    <head runat="server">
    <title>TreeView绑定XML示例</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <li>
    <asp:XmlDataSource ID="XmlDataSource1" runat="server" 
    DataFile="~/App_Data/XMLFile。xml">
    </asp:XmlDataSource>
    </li>
    <asp:TreeView ID="TreeView1" runat="server" 
    DataSourceID="XmlDataSource1">
    </asp:TreeView>
    </form>
    </body>
    </html>
    
    		
  •  

    3、绑定XML

    用编程的方式通过TreeNodeBinding对象添加节点与XML文档绑定的对应关系

  •  
  • C# 代码   复制
  • 
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    this.TreeView1.ShowLines = true;
                    //以下是添加节点与数据源绑定的对应关系
                    TreeNodeBinding contact = new TreeNodeBinding();
                    contact.DataMember = "contact";//指定绑定的成员
                    contact.ValueField = "name";//取值的字段
                    this.TreeView1.DataBindings.Add(contact);
    
                    TreeNodeBinding genre = new TreeNodeBinding();
                    genre.DataMember = "genre";//添加与"地区"绑定
                    genre.ValueField = "name";
                    this.TreeView1.DataBindings.Add(genre);
    
                    TreeNodeBinding person = new TreeNodeBinding();
                    person.DataMember = "person";//添加与"负责人"绑定
                    person.ValueField = "Text";
                    this.TreeView1.DataBindings.Add(person);
    
                    TreeNodeBinding name = new TreeNodeBinding();
                    name.DataMember = "name";//添加与"名称"绑定
                    name.ValueField = "#InnerText";
                    this.TreeView1.DataBindings.Add(name);
    
                    TreeNodeBinding sex = new TreeNodeBinding();
                    sex.DataMember = "sex";//添加与"性别"绑定
                    sex.ValueField = "#InnerText";
                    this.TreeView1.DataBindings.Add(sex);
    
                    TreeNodeBinding age = new TreeNodeBinding();
                    age.DataMember = "age";//添加与"年龄"绑定
                    age.ValueField = "#InnerText";
                    this.TreeView1.DataBindings.Add(age);
    
                    TreeNodeBinding address = new TreeNodeBinding();
                    address.DataMember = "address";//添加与"地址"绑定
                    address.ValueField = "#InnerText";
                    this.TreeView1.DataBindings.Add(address);
                }
            }
    
    		
  •  

    备注

    (1)、TreeNodeBinding类在TreeView控件中定义数据项与该数据项绑定到的节点之间的关系。该类的DataMember属性指定在节点显示的数据源对应XML的节点。ValueField属性对应TreeNode对象的Value属性。

    (2)、TreeNodeBinding类的Text属性指定向用户显示的文本,如果该属性没有指定,则默认与ValueField属性相同。

    (3)、TreeView控件的DataSourceID属性指定数据源控件源ID。

     

    二、用循环方式添加节点到TreeView树中

     

    实现步骤

     

    1、添加包含库

    using System.Web;

    using System.Web.UI;

    using System.Xml;

     

    2、打开xml文件

    private static XmlDocument xmlDoc;

    private void openXML()
    {
            xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath("department。xml"));     //Server.MapPath("")获取绝对路径,有几种方法
    }

     

    3、使用递归方法,将xml节点填入到treeview中

  •  
  • C# 代码   复制
  • 
            private void expandTree()
            {
                try
                {
                    numofChild = 0;
    
                    if(xmlDoc==null)openXML();
    
                    //初始化Treeview
                    TreeView2.Nodes.Clear();
                    TreeView2.Nodes.Add(new TreeNode(xmlDoc.DocumentElement.Name));
    
                    TreeNode tNode = new TreeNode();
                    tNode = TreeView2.Nodes[0];               
    
                    // 将xml节点填入treeview相应位置
                    AddNode(xmlDoc.DocumentElement, tNode);
                    TreeView2.ExpandAll();
    
                }
                catch (XmlException xmlEx)
                {
                    throw xmlEx;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
         private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)  //递归遍历
          {
             XmlNode xNode;
             TreeNode tNode;
             XmlNodeList nodeList;
             int i;
    
             // 遍历所有XML nodes直到到达叶子节点.
             // 在循环过程中将节点添加到treeview中
             if (inXmlNode.HasChildNodes)
             {
                nodeList = inXmlNode.ChildNodes;
                for(i = 0; i<=nodeList.Count - 1; i++)
                {
                   xNode = inXmlNode.ChildNodes[i];
                   inTreeNode.ChildNodes.Add(new TreeNode(xNode.Name));
                   inTreeNode.Value = xNode.Attributes["value"].Value;
    
                   tNode = inTreeNode.ChildNodes[i];
                   AddNode(xNode, tNode);
                }
             }
             else
             {
                // 到达叶子节点
                inTreeNode.Text = (inXmlNode.Name).Trim();
                inTreeNode.Value = inXmlNode.Attributes["value"].Value;
                if (int.Parse(inTreeNode.Value)>0)numofChild++;   //记录节点数目,此步是本次实验需要而额外记录的
             }
          }
    
    		
  •  

     

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐