다음을 통해 공유


방법: 데이터 바인딩된 템플릿 컨트롤에 ASP.NET Dynamic Data 사용

업데이트: 2007년 11월

ListView, FormViewRepeater 같은 템플릿을 사용하는 데이터 바인딩된 컨트롤에 ASP.NET Dynamic Data를 사용할 수 있습니다. 템플릿을 사용하면 컨트롤에서 데이터의 레이아웃과 모양을 완벽하게 제어할 수 있지만 템플릿이 열을 자동으로 생성하지 못하기 때문에 페이지가 작업 중인 테이블에 한정되게 됩니다. 데이터 바인딩된 템플릿 컨트롤과 함께 Dynamic Data 기능을 사용하는 사용자 지정 페이지를 만들려는 경우 이 기능이 유용합니다.

데이터 바인딩된 템플릿 컨트롤로 작업하는 경우 DynamicControl 컨트롤을 템플릿에 추가하여 Dynamic Data 기능을 사용할 수 있습니다. DynamicControl 컨트롤을 사용할 때는 다음과 같은 Dynamic Data 기능을 이용할 수 있습니다.

  • 데이터 형식을 기준으로 필드의 적절한 컨트롤을 자동으로 렌더링합니다.

  • 각 데이터 형식을 렌더링하는 템플릿을 제어하여 전체 응용 프로그램을 전역적으로 수정할 수 있습니다.

  • 데이터베이스 스키마에 기반한 데이터 유효성 검사를 기본 제공할 수 있습니다.

  • 데이터 모델의 특성을 사용하거나 UIHint 속성을 사용하여 개별 필드의 데이터 렌더링을 사용자 지정합니다. 자세한 내용은 각각 ASP.NET Dynamic Data 모델 개요방법: Dynamic Data 컨트롤의 데이터 필드 모양 및 동작 사용자 지정을 참조하십시오.

DynamicControl 컨트롤은 데이터 바인딩된 템플릿 컨트롤에서 사용할 수 있을 뿐만 아니라 GridView 또는 DetailsView 컨트롤의 TemplateField 필드에서도 사용할 수 있습니다.

이 기능의 온라인 예제를 실행해 보십시오.

데이터를 표시하는 DynamicControl 컨트롤을 추가하려면

  1. 데이터 바인딩된 컨트롤의 템플릿 중 하나에 DynamicControl 컨트롤을 추가합니다.

    참고:

    대개 템플릿 컨트롤에서 데이터 표시를 담당하는 템플릿인 ItemTemplate 템플릿에 읽기 전용 필드를 추가합니다. 하지만 필드 값을 수정할 필요가 없는 경우에도 다른 템플릿에 읽기 전용 필드를 추가할 수 있습니다.

  2. 다음 예제에서 볼 수 있는 것처럼 DataField 속성을 표시하려는 열의 이름으로 설정합니다.

    <asp:DynamicControl 
      DataField="ProductName"
       />
    
    참고:

    Mode 속성의 기본값은 ReadOnly이므로 이 속성을 데이터 표시 전용으로 설정할 필요는 없습니다.

  3. 표시하려는 각 데이터 필드에 대해 이전 단계를 반복합니다.

편집 작업용 DynamicControl 컨트롤을 추가하려면

  1. DynamicControl 컨트롤을 데이터 바인딩된 컨트롤이나 템플릿 필드의 EditItemTemplate 템플릿에 추가합니다.

  2. DataField 속성을 편집하려는 열의 이름으로 설정합니다.

  3. 다음 예제에서 볼 수 있는 것처럼 Mode 속성을 Edit로 설정합니다.

    <asp:DynamicControl 
      DataField="ProductName"
      Mode="Edit"
       />
    
  4. 편집하려는 각 데이터 필드에 대해 이전 단계를 반복합니다.

삽입 작업용 DynamicControl 컨트롤을 추가하려면

  1. DynamicControl 컨트롤을 데이터 바인딩된 컨트롤이나 템플릿 필드의 InsertItemTemplate 템플릿에 추가합니다.

  2. DataField 속성을 데이터를 삽입하려는 열의 이름으로 설정합니다.

  3. 다음 예제에서 볼 수 있는 것처럼 Mode 속성을 Insert로 설정합니다.

    <asp:DynamicControl 
      DataField="ProductName"
      Mode="Insert"
       />
    
  4. 데이터를 삽입하려는 각 데이터 필드에 대해 이전 단계를 반복합니다.

예제

다음 예제에서는 DynamicControl 컨트롤을 사용하여 Dynamic Data 기능을 사용하는 사용자 지정 페이지를 만드는 FormView 컨트롤을 보여 줍니다.

<%@ Page Language="VB" %>

<script >

  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    DynamicDataManager1.RegisterControl(FormView1)
  End Sub

</script>

<!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>DynamicControl and Templated Data-Bound Controls Sample</title>
  <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form id="form1" >
    <div>

      <h2>Address Table</h2>

      <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />

      <asp:FormView ID="FormView1"  
        DataSourceID="FormDataSource" 
        AllowPaging="true">
        <ItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="New" CausesValidation="false" Text="New" />
                <asp:LinkButton ID="EditButton"  CommandName="Edit" CausesValidation="false" Text="Edit" />
                <asp:LinkButton ID="DeleteButton"  CommandName="Delete" CausesValidation="false" Text="Delete" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
        <EditItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="UpdateButton"  CommandName="Update">Update</asp:LinkButton>
                <asp:LinkButton ID="CancelEditButton"  CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
              </td>
            </tr>
          </table>
        </EditItemTemplate>
        <InsertItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="Insert" Text="Insert" />
                <asp:LinkButton ID="CancelInsertButton"  CommandName="Cancel" CausesValidation="false" Text="Cancel" />
              </td>
            </tr>
          </table>
        </InsertItemTemplate>
        <PagerSettings Position="Bottom" Mode="NumericFirstLast" />
      </asp:FormView>

      <!-- This example uses Microsoft SQL Server and connects   -->
      <!-- to the AdventureWorksLT sample database.              -->
      <asp:LinqDataSource ID="FormDataSource" 
        TableName="Addresses" 
        ContextTypeName="AdventureWorksLTDataContext"
        EnableDelete="true"
        EnableInsert="true"
        EnableUpdate="true">
      </asp:LinqDataSource>

    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>

<script >
    protected void Page_Init(object sender, EventArgs e) {
        DynamicDataManager1.RegisterControl(FormView1);
    }
</script>

<!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>DynamicControl and Templated Data-Bound Controls Sample</title>
  <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form id="form1" >
    <div>

      <h2>Address Table</h2>

      <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />

      <asp:FormView ID="FormView1"  
        DataSourceID="FormDataSource" 
        AllowPaging="true">
        <ItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="New" CausesValidation="false" Text="New" />
                <asp:LinkButton ID="EditButton"  CommandName="Edit" CausesValidation="false" Text="Edit" />
                <asp:LinkButton ID="DeleteButton"  CommandName="Delete" CausesValidation="false" Text="Delete" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
        <EditItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="UpdateButton"  CommandName="Update">Update</asp:LinkButton>
                <asp:LinkButton ID="CancelEditButton"  CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
              </td>
            </tr>
          </table>
        </EditItemTemplate>
        <InsertItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="Insert" Text="Insert" />
                <asp:LinkButton ID="CancelInsertButton"  CommandName="Cancel" CausesValidation="false" Text="Cancel" />
              </td>
            </tr>
          </table>
        </InsertItemTemplate>
        <PagerSettings Position="Bottom" Mode="NumericFirstLast" />
      </asp:FormView>

      <!-- This example uses Microsoft SQL Server and connects   -->
      <!-- to the AdventureWorksLT sample database.              -->
      <asp:LinqDataSource ID="FormDataSource" 
        TableName="Addresses" 
        ContextTypeName="AdventureWorksLTDataContext"
        EnableDelete="true"
        EnableInsert="true"
        EnableUpdate="true">
      </asp:LinqDataSource>

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

코드 컴파일

이 예제를 컴파일하려면 다음 요소가 필요합니다.

  • Dynamic Data 웹 사이트 또는 Dynamic Data 웹 응용 프로그램

  • AdventureWorks 샘플 데이터베이스 또는 AdventureWorksLT 샘플 데이터베이스. SQL Server 샘플을 다운로드 및 설치하는 방법에 대한 자세한 내용은 CodePlex 사이트의 Microsoft SQL Server Product Samples: Database를 참조하십시오. 실행 중인 SQL Server 버전(SQL Server 2005 또는 SQL Server 2008)에 맞는 올바른 샘플 데이터베이스 버전을 설치해야 합니다.

  • AdventureWorks 또는 AdventureWorksLT 데이터베이스의 Address 테이블에 액세스하도록 구성된 LINQ to SQL 클래스

  • Global.asax 파일에서 Dynamic Data 엔진에 등록된 데이터 컨텍스트

  • Address 테이블에서 rowguid 및 ModifiedData 열을 개체 관계형 디자이너에서 자동으로 생성되도록 설정합니다. 즉, 이 두 열의 IsDbGenerated 속성을 true로 설정해야 합니다. 이것은 삽입 작업에만 필요합니다.

강력한 프로그래밍

다음 조건에서 예외가 발생할 수 있습니다.

  • 데이터베이스를 사용할 수 없는 경우

참고 항목

개념

ASP.NET Dynamic Data 개요

ASP.NET Dynamic Data 모델 개요

참조

DynamicControl

DetailsView

FormView

GridView

ListView

Repeater