次の方法で共有


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>

参照

その他の技術情報

データ ソース Web サーバー コントロール