XmlDataSource コントロールへの表形式のコントロールのバインド
更新 : 2007 年 11 月
XmlDataSource コントロールは、主に階層的な XML データを TreeView コントロール、Menu コントロールなどのバインド コントロールに公開するために使用します。GridView コントロール、DataList コントロールなどの表形式のデータ バインディング コントロールを XmlDataSource コントロールにバインドできます。
XML データのフィールドへのバインド
XmlDataSource コントロールに表形式のデータ バインディング コントロールをバインドすると、データ バインディング コントロールは XML 階層の最初のレベルのみをレンダリングします。XmlDataSource コントロールは、第 1 レベルのノードの属性をデータ テーブルの該当する列として公開します。その結果、BoundField オブジェクトの DataField の名前として、第 1 レベルのノードから属性名を指定できます。コントロール テンプレートの Eval データ バインディング式に属性名を指定することもできます。
XPath メソッドによる XML 階層へのバインディング
表形式のコントロールによって、Eval メソッドまたは Bind メソッドを使用してテンプレートのコントロールをデータにバインドできます。表形式のコントロールを XmlDataSource コントロールにバインドする場合は、XPath メソッドを使用することもできます。これによって、読み取り専用データ バインディングに XPath クエリを指定できます。
XPath データ バインディング メソッドは XML 階層をナビゲートし、階層の任意の位置のノードまたは属性から値を返します。XPath データ バインディング メソッドを使用するときは、XPath クエリおよびオプションで第 2 のパラメータを渡して、返された文字列の形式を指定します。文字列の書式指定パラメータは、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>