Поделиться через


Привязка табличного элемента управления к элементу управления XmlDataSource

Обновлен: Ноябрь 2007

Элемент управления XmlDataSource используется, в первую очередь, для предоставления доступа к иерархическим данным XML таким связанным элементам управления, как TreeView или Menu. Также можно привязать табличный элемент управления, связанный с данными, такой как GridView или DataList, к элементу управления XmlDataSource.

Привязка к полям в данных XML

При привязке табличных элементов управления с привязкой данных к элементу управления XmlDataSource, элемент управления отображает только первый уровень иерархии XML. Элемент управления XmlDataSource предоставляет доступ к атрибутам узлов первого уровня, являющимся эквивалентами столбцов в таблице данных. В результате этого можно указать имя атрибута из узла первого уровня в качестве имени DataField для объекта BoundField. Также можно указать имя атрибута в выражении привязки данных Eval в шаблоне элемента управления.

Привязка к иерархии XML с помощью метода XPath

Табличные элементы управления позволяют выполнять привязку элементов управления в шаблоне к данным с использованием методов Eval или Bind. Если выполняется привязка табличного элемента управления к элементу управления XmlDataSource, то можно использовать также метод XPath, позволяющий указать запрос XPath для привязки данных с доступом только для чтения.

Метод привязки данных XPath проходит по иерархии XML и возвращает значение из узла или атрибут в любом месте иерархии. Используя метод привязки данных XPath, передается запрос XPath и дополнительный второй параметр для указания формата возвращаемой строки. Параметр формата строки использует синтаксис, определенный для метода Format класса String.

В следующем примере кода показан элемент управления DataList, связанный с элементом управления XmlDataSource. В выражении привязки данных в шаблоне использован метод XPath для возврата значений, извлеченных из данных XML. Подробные сведения о файле People.xml, использованном в примере, см. в разделе Общие сведения о серверном веб-элементе управления XmlDataSource.

<%@ 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 для отображения узлов Order_Details внутри иерархии XML.

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

См. также

Другие ресурсы

Серверные веб-элементы управления источников данных