다음을 통해 공유


XmlDataSource 컨트롤에 표 형식 컨트롤 바인딩

업데이트: 2007년 11월

XmlDataSource 컨트롤은 주로 바인딩 컨트롤(예: TreeView 또는 Menu 컨트롤)에 계층 형식의 XML 데이터를 노출하는 데 사용됩니다. 또한 표 형식의 데이터 바인딩된 컨트롤(예: GridView 또는 DataList 컨트롤)을 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 웹 서버 컨트롤 개요를 참조하십시오.

<%@ 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 >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        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")%>'  />, 
                <asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>'  />
              </td>
              <td valign="top">
                 <asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>'  /><br />
                 <asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>'  />, 
                 <asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>'  />
                 <asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>'  />
              </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 >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        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")%>'  />, 
                <asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>'  />
              </td>
              <td valign="top">
                 <asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>'  /><br />
                 <asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>'  />, 
                 <asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>'  />
                 <asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>'  />
              </td>
            </tr>
          </table>
        </ItemTemplate>
      </asp:DataList>
    </form>
  </body>
</html>

XPathSelect를 사용하여 선택한 노드 반환

항목 템플릿의 중첩된 표 형식 데이터 컨트롤을 XmlDataSource 컨트롤이 제공한 데이터에서 선택한 노드 목록에 바인딩할 수 있습니다. 이렇게 하려면 XPathSelect 메서드를 사용합니다. XPathSelect 메서드는 XPath 식과 일치하는 노드 목록을 반환합니다. 표 형식 데이터 컨트롤에서는 이 노드 목록을 데이터 레코드 컬렉션처럼 사용할 수 있습니다. 다음 예제에서는 중첩된 DataList 컨트롤에 XPathSelect 메서드를 사용하여 XML 계층 구조 내에서 Order_Details 노드를 표시하는 방법을 보여 줍니다.

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

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

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

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

  </ItemTemplate>
</asp:DataList>

참고 항목

기타 리소스

데이터 소스 웹 서버 컨트롤