Привязка табличного элемента управления к элементу управления 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>