다음을 통해 공유


데이터 소스 컨트롤을 사용하여 데이터에 바인딩

업데이트: 2007년 11월

데이터 소스 컨트롤은 GridView, FormViewDetailsView 컨트롤과 같은 데이터 바인딩된 컨트롤의 기능을 대폭 확장합니다. 데이터 소스 컨트롤과 데이터 바인딩된 컨트롤을 함께 사용하면 코드를 거의 사용하지 않고 다양한 데이터 소스에서 데이터를 검색, 수정, 페이징, 정렬 및 필터링할 수 있습니다.

DataSourceID 속성을 사용하여 바인딩

데이터 바인딩된 컨트롤을 LinqDataSource, ObjectDataSource 또는 SqlDataSource 컨트롤과 같은 데이터 소스 컨트롤에 바인딩하면 데이터 바인딩된 컨트롤에서 데이터를 사용할 수 있습니다. 데이터 소스 컨트롤은 데이터베이스, 엔터티 클래스 또는 중간 계층 개체와 같은 데이터 소스에 연결한 다음 데이터를 검색하거나 업데이트합니다. 그러면 데이터 바인딩된 컨트롤에서 이 데이터를 사용할 수 있습니다. 바인딩을 수행하려면 데이터 소스 컨트롤을 가리키도록 데이터 바인딩된 컨트롤의 DataSourceID 속성을 설정합니다. 데이터 바인딩된 컨트롤을 데이터 소스 컨트롤에 바인딩하면 데이터 작업에 추가 코드가 거의 필요 없습니다. 데이터 바인딩된 컨트롤에서는 데이터 소스 컨트롤에서 제공하는 데이터 서비스를 자동으로 사용할 수 있습니다.

참고:

ASP.NET 이전 버전에서는 DataSource 속성을 사용하여 데이터 바인딩된 컨트롤을 데이터에 바인딩했습니다. 이렇게 하면 데이터 표시, 페이징, 정렬, 편집 및 삭제와 같은 작업을 처리하기 위한 코드를 작성해야 합니다. DataSource 속성을 사용하여 컨트롤을 데이터에 바인딩하고 기존 코드를 사용할 수도 있지만 DataSourceID 속성을 대신 사용하여 데이터 바인딩을 수행할 수도 있습니다. 일반적으로 DataSourceID 속성을 사용하면 DataSource 속성을 사용하는 것 보다 더 많은 자동 기능이 제공됩니다.

다음 예제에서는 데이터베이스의 데이터를 표시하기 위해 LinqDataSource 컨트롤에 바인딩된 FormView 컨트롤을 보여 줍니다. 예제가 수행되려면 데이터베이스 및 테이블을 나타내는 클래스를 만들어야 합니다. 이러한 클래스는 개체 관계형 디자이너를 사용하여 만들 수 있습니다. 자세한 내용은 O/R 디자이너(개체 관계형 디자이너)를 참조하십시오.

<%@ 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>FormView Example</title>
</head>
<body>
    <form id="form1" >
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:FormView ID="ProductsFormView"
                DataSourceID="LinqDataSource1"
                AllowPaging="true"
                >

                <HeaderStyle forecolor="white" backcolor="Blue" />                

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel"  Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel"  Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel"  Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel"  Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel"  Text='<%# Eval("UnitPrice") %>' /></td>
                    </tr>
                  </table>                 
                </ItemTemplate>

                <PagerTemplate>
                  <table>
                    <tr>
                      <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
                      <td><asp:LinkButton ID="PrevButton"  CommandName="Page" CommandArgument="Prev"  Text="<"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="NextButton"  CommandName="Page" CommandArgument="Next"  Text=">"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="LastButton"  CommandName="Page" CommandArgument="Last"  Text=">>" RunAt="server"/></td>
                    </tr>
                  </table>
                </PagerTemplate>

              </asp:FormView>

            </td>
          </tr>
        </table>

        <asp:LinqDataSource 
            ContextTypeName="NorthwindDataContext" 
            TableName="Products"
            ID="LinqDataSource1"  
            >
        </asp:LinqDataSource>

      </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>FormView Example</title>
</head>
<body>
    <form id="form1" >
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:FormView ID="ProductsFormView"
                DataSourceID="LinqDataSource1"
                AllowPaging="true"
                >

                <HeaderStyle forecolor="white" backcolor="Blue" />                

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel"  Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel"  Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel"  Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel"  Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel"  Text='<%# Eval("UnitPrice") %>' /></td>
                    </tr>
                  </table>                 
                </ItemTemplate>

                <PagerTemplate>
                  <table>
                    <tr>
                      <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
                      <td><asp:LinkButton ID="PrevButton"  CommandName="Page" CommandArgument="Prev"  Text="<"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="NextButton"  CommandName="Page" CommandArgument="Next"  Text=">"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="LastButton"  CommandName="Page" CommandArgument="Last"  Text=">>" RunAt="server"/></td>
                    </tr>
                  </table>
                </PagerTemplate>

              </asp:FormView>

            </td>
          </tr>
        </table>

        <asp:LinqDataSource 
            ContextTypeName="NorthwindDataContext" 
            TableName="Products"
            ID="LinqDataSource1"  
            >
        </asp:LinqDataSource>

      </form>
  </body>
</html>

데이터 소스 컨트롤에 대한 자세한 내용은 데이터 소스 웹 서버 컨트롤을 참조하십시오.

데이터 선택

데이터 소스 컨트롤의 데이터 검색 방법은 컨트롤에 의해 결정됩니다. ObjectDataSource 컨트롤은 SelectMethod 속성에 지정된 메서드를 호출하여 데이터를 읽습니다. 다음 예제에서는 EmployeeLogic 클래스의 GetAllEmployees 메서드를 사용하여 데이터를 반환하는 ObjectDataSource 컨트롤을 보여 줍니다.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ 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>ObjectDataSource - Visual Basic Example</title>
  </head>
  <body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.VB.EmployeeLogic" />

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ 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>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.CS.EmployeeLogic" />

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.JSL" Assembly="Samples.AspNet.JSL" %>
<%@ Page language="VJ#" %>
<!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>ObjectDataSource - VJ# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.JSL.EmployeeLogic" />

    </form>
  </body>
</html>

자세한 내용은 ObjectDataSource 웹 서버 컨트롤 개요를 참조하십시오.

SqlDataSourceAccessDataSource 컨트롤은 SelectCommand 속성에 지정된 SQL 쿼리를 실행하여 데이터를 선택합니다. 다음 예제에서는 Northwind 샘플 데이터베이스의 Employees 테이블에서 데이터를 반환하는 SqlDataSource 컨트롤을 보여 줍니다.

<%@ 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:SqlDataSource
          id="SqlDataSource1"
          
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </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:SqlDataSource
          id="SqlDataSource1"
          
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<!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:SqlDataSource
          id="SqlDataSource1"
          
          DataSourceMode="DataReader"
          ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>

자세한 내용은 SqlDataSource 컨트롤을 사용하여 데이터 선택을 참조하십시오.

LinqDataSource 컨트롤을 사용할 때 해당 컨트롤의 Select 속성을 설정하지 않으면 컨트롤은 데이터 클래스의 모든 속성에 대한 데이터를 반환합니다. Select 속성을 설정하여 속성의 하위 집합을 지정하거나 새 값을 계산할 수 있습니다. 다음 예제에서는 추가 속성을 포함하는 데이터 소스의 속성 세 개를 반환하는 LinqDataSource 컨트롤을 보여 줍니다.

<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Select="new(Name, Category, Price)"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    >
</asp:GridView>
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Select="new(Name, Category, Price)"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    >
</asp:GridView>

XmlDataSource에서는 소스 XML 데이터의 특정 요소를 선택할 수 없습니다. 그러나 XPath 속성을 사용하여 필터를 지정할 수 있습니다. 자세한 내용은 XmlDataSource 컨트롤을 사용하여 데이터 필터링을 참조하십시오.

데이터 수정

LinqDataSource, ObjectDataSourceSqlDataSource 컨트롤을 구성하면 사용자가 데이터를 수정할 수 있습니다. 자세한 내용은 데이터 소스 컨트롤을 사용하여 데이터 수정을 참조하십시오.

참고 항목

기타 리소스

데이터 소스 웹 서버 컨트롤