将表格控件绑定到 XmlDataSource 控件

更新:2007 年 11 月

XmlDataSource 控件主要用于将分层的 XML 数据公开给诸如 TreeViewMenu 控件等绑定控件。还可以将 GridViewDataList 控件等表格数据绑定控件绑定到 XmlDataSource 控件。

绑定到 XML 数据中的字段

在将表格数据绑定控件绑定到 XmlDataSource 控件时,该控件仅呈现 XML 层次结构的第一级。XmlDataSource 控件将第一级节点的属性公开为数据表中的等效列。因此,您可以将第一级节点中的属性名称指定为 BoundField 对象的 DataField 的名称。也可以在控件模板的 Eval 数据绑定表达式中指定属性名称。

使用 XPath 方法绑定到 XML 层次结构

使用表格控件,可以通过 Eval 或 Bind 方法将模板中的控件绑定到数据。如果要将表格控件绑定到 XmlDataSource 控件,还可以使用 XPath 方法,从而能够为只读数据绑定指定 XPath 查询。

XPath 数据绑定方法导航 XML 层次结构,并从位于该层次结构任意处的节点或属性中返回值。使用 XPath 数据绑定方法时,需传递一个 XPath 查询和一个可选的参数来指定返回字符串的格式。字符串格式参数使用为 String 类的 Format 方法定义的语法。

下面的代码示例演示绑定到 XmlDataSource 控件的 DataList 控件。模板中的数据绑定表达式使用 XPath 方法从 XML 数据中返回值。有关该示例中使用的 People.xml 文件的详细信息,请参见 XmlDataSource Web 服务器控件概述

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:XmlDataSource
        id="PeopleDataSource"
        runat="server"
        XPath="/People/Person"
        DataFile="~/App_Data/people.xml" />

      <asp:DataList
        id="PeopleDataList"
        DataSourceID="PeopleDataSource"
        Runat="server">

        <ItemTemplate>
          <table cellpadding="4" cellspacing="4">
            <tr>
              <td style="vertical-align:top; width:120">
                <asp:Label id="LastNameLabel" Text='<%# XPath("Name/LastName")%>' runat="server" />, 
                <asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>' runat="server" />
              </td>
              <td valign="top">
                 <asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>' runat="server" /><br />
                 <asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>' runat="server" />, 
                 <asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>' runat="server" />
                 <asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>' runat="server" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
      </asp:DataList>
    </form>
  </body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:XmlDataSource
        id="PeopleDataSource"
        runat="server"
        XPath="/People/Person"
        DataFile="~/App_Data/people.xml" />

      <asp:DataList
        id="PeopleDataList"
        DataSourceID="PeopleDataSource"
        Runat="server">

        <ItemTemplate>
          <table cellpadding="4" cellspacing="4">
            <tr>
              <td style="vertical-align:top; width:120">
                <asp:Label id="LastNameLabel" Text='<%# XPath("Name/LastName")%>' runat="server" />, 
                <asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>' runat="server" />
              </td>
              <td valign="top">
                 <asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>' runat="server" /><br />
                 <asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>' runat="server" />, 
                 <asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>' runat="server" />
                 <asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>' runat="server" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
      </asp:DataList>
    </form>
  </body>
</html>

使用 XPathSelect 返回所选节点

可以将项模板中的嵌套表格数据控件绑定到从 XmlDataSource 控件提供的数据中选择的节点列表。为此,可以使用 XPathSelect 方法。XPathSelect 方法返回与 XPath 表达式匹配的节点列表,表格数据控件可以像使用数据记录集合那样使用该列表。下面的示例演示如何将 XPathSelect 方法与嵌套的 DataList 控件一起使用,以显示 XML 层次结构中的 Order_Details 节点。

<asp:XmlDataSource
  id="OrdersDataSource"
  runat="server"
  DataFile="~\App_Data\orders.xml" />

<asp:DataList
  id="OrdersDataList"
  DataSourceID="OrdersDataSource"
  Runat="server">

  <ItemTemplate>
    Order ID: <asp:Label id="OrderIDLabel" runat="server" 
                Text='<%# XPath("OrderID") %> /><BR>

    <asp:DataList id="ProductsDataList" runat="server"
      DataSource='<%# XPathSelect("Order_Details") %>' >
      <ItemTemplate>
        <br>Product ID:<%# XPath("ProductID")%>
        <br>Quantity: <%# XPath("Quantity") %>
      </ItemTemplate>
    </asp:DataList>

  </ItemTemplate>
</asp:DataList>

请参见

其他资源

数据源 Web 服务器控件