다음을 통해 공유


방법: 데이터 모델의 데이터 필드 표시 사용자 지정

업데이트: 2007년 11월

이 항목에서는 필드 템플릿을 만들어 ASP.NET Dynamic Data의 데이터 필드(테이블 열) 표시를 사용자 지정하는 방법을 설명합니다. 이 항목에서 설명하는 작업은 다음과 같습니다.

  • 사용자 지정 필드 템플릿을 만들어 데이터 필드 표시 사용자 지정

  • 사용자 지정 필드 템플릿에 데이터 필드 연결. 이렇게 하면 표시를 처리할 수 있도록 데이터 필드와 사용자 지정 필드 템플릿 간에 데이터 모델이 연결됩니다.

    참고:

    데이터 모델을 사용하여 데이터 필드 표시를 사용자 지정하면 사용자 지정한 내용이 전체 웹 사이트에 적용됩니다. 즉, Dynamic Data가 데이터 필드의 형식을 기준으로 선택되는 기본 템플릿 대신 사용자 지정 필드 템플릿을 사용하여 데이터 필드를 표시합니다.

사용자 지정 필드 템플릿을 만들려면

  1. 솔루션 탐색기에서 DynamicData/FieldTemplates 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  2. Visual Studio에 설치되어 있는 템플릿에서 필드 템플릿을 클릭합니다.

    이름 상자에 원하는 컨트롤 이름을 입력합니다. 이때 다른 파일에 코드 입력 상자를 선택해야 합니다.

  3. 방금 만든 사용자 정의 컨트롤 파일로 전환하거나 해당 파일을 엽니다.

  4. @ Control 지시문에서 코드 숨김 파일을 참조하는 CodeFile 특성과 컨트롤 클래스를 참조하는 Inherits 특성을 추가합니다.

    <%@ Control Language="C#" 
      CodeFile=MyCustomControl.ascx.cs"
      Inherits="MyCustomControl" %>
    
    <%@ Control Language="VB" 
      CodeFile=MyCustomControl.ascx.cs"
      Inherits="MyCustomControl" %>
    
  5. 데이터 표시를 위해 렌더링할 태그를 만듭니다.

    다음 예제에서는 Text 속성이 현재 필드 값 문자열로 설정되어 있고 OnDataBinding 속성이 사용자 지정 이벤트 처리기로 설정된 Label 컨트롤을 보여 줍니다.

    <asp:Label id="TextLabel1"  
      OnDataBinding="DataBindingHandler" 
      Text='<%# FieldValueString %>'>
    </asp:Label> 
    
  6. 사용자 정의 컨트롤 파일을 저장하고 닫습니다.

  7. 사용자 정의 컨트롤 코드 숨김 파일을 엽니다.

  8. Visual Basic의 Imports 키워드를 사용하거나 Visual C#의 using 키워드를 사용하여 System.Web.DynamicData를 참조하는 네임스페이스 지시문을 추가합니다.

    using System.Web.DynamicData;
    
    Imports System.Web.DynamicData
    
  9. 다음 코드에서처럼 FieldTemplateUserControl 클래스에서 사용자 정의 컨트롤 partial 클래스를 파생시킵니다.

    partial class MyCustomControl: FieldTemplateUserControl
    

    { }

    Public Partial Class MyCustomControl Inherits _ FieldTemplateUserControl
    
    End Class 
    
  10. 컨트롤의 데이터 필드 표시 방법을 사용자 지정하려면 해당 사용자 정의 컨트롤의 OnDataBinding 이벤트를 처리합니다. 처리기에서 컨트롤의 FieldValue 속성에서 현재 데이터 필드 값을 가져와서 표시를 적절히 사용자 지정할 수 있습니다.

    다음 예제에서는 OnDataBinding 이벤트를 처리하는 방법을 보여 줍니다.

    public void DataBindingHandler(object sender, EventArgs e)
    {
      // Define the understocked threshold.
      short underStockedThreshold = 150;
      // Get the current number of items in stock.
      short currentValue = (short)FieldValue;
      // Check product stock. 
      if (currentValue < underStockedThreshold)
      {
          // Customize display here. For example you show the data with      
         //a red background.
      }
    }
    
    Public Sub DataBindingHandler(ByVal sender As Object, _
    ByVal e As EventArgs)
      ' Define the understocked threshold.
      Dim underStockedThreshold As Short = 150
      ' Get the current number of items in stock.
        Dim currentValue As Short = DirectCast(FieldValue, Short)
        ' Check product stock. 
        If currentValue < underStockedThreshold Then
            'Customize display here. For example you show the data with      
           'a red background.
        End If
    End Sub
    
  11. 사용자 정의 컨트롤 코드 숨김 파일을 닫습니다. 이제 사용자 지정 필드 템플릿이 만들어졌습니다.

사용자 지정 필드 템플릿에 데이터 필드를 연결하려면

  1. 솔루션 탐색기에서 App_Code 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  2. Visual Studio에 설치되어 있는 템플릿에서 클래스를 클릭합니다.

    이름 상자에 사용자 지정 필드 템플릿을 사용하여 표시할 데이터가 포함된 데이터베이스 테이블의 이름을 입력합니다.

    예를 들어 사용자 지정 컨트롤에 Products 테이블의 데이터를 표시할 경우 파일 이름은 Products.cs 또는 Product.vb이고 클래스 이름은 Product입니다. 이 파일에는 데이터 필드 표시를 사용자 지정하는 데 사용할 수 있는 보조 클래스도 포함됩니다.

  3. 방금 만든 클래스 파일로 전환하거나 해당 파일을 엽니다.

  4. 클래스 정의를 partial 클래스로 만들려면 해당 클래스 정의에 Visual Basic의 Partial 키워드 또는 Visual C#의 partial 키워드를 추가합니다.

  5. Visual Basic의 Imports 키워드를 사용하거나 Visual C#의 using 키워드를 사용하여 System.Web.DynamicDataSystem.ComponentModel.DataAnnotations를 참조하는 네임스페이스 지시문을 추가합니다.

    using System.Web.DynamicData;
    using System.ComponentModel.DataAnnotations;
    
    Imports System.Web.DynamicData
    Imports System.ComponentModel.DataAnnotations 
    
  6. MetadataTypeAttribute 특성을 partial 클래스 정의에 추가합니다. 이 특성의 매개 변수는 데이터 필드 표시 사용자 지정을 처리하기 위해 만들 보조 메타데이터 클래스의 이름입니다.

    [MetadataType(typeof(ProductMetadata))]
    public partial class Product {
    
    }
    
    <MetadataType(GetType(ProductMetadata))> _
    Public Partial Class Product 
    
    End Class
    
  7. 보조 메타데이터 클래스로 사용할 클래스를 만듭니다. 클래스에 임의의 이름을 지정할 수 있지만 이 이름은 이전 단계의 MetadataTypeAttribute 특성에서 참조한 이름과 일치해야 합니다.

  8. 메타데이터 클래스에서 표시할 데이터 필드와 이름이 일치하는 필드를 만듭니다. UIHintAttribute 특성으로 필드를 표시하고 표시에 사용할 사용자 지정 필드 템플릿의 이름을 지정합니다.

    보조 클래스는 UIHintAttribute 특성을 정의할 위치를 제공하는 용도로만 사용되므로 다른 코드는 추가할 필요가 없습니다.

    다음 예제에서는 UnitsInStock 필드에 대한 사용자 지정 표시를 정의하는 단일 필드(UIHintAttribute 특성 포함)가 포함된 메타데이터 클래스의 완전한 정의를 보여 줍니다.

    public class ProductMetadata
      [UIHint("UnitsInStock")]
      public object UnitsInStock;
    }
    
    Public Class ProductMetadata 
      <UIHint("UnitsInStock")> _
      Public UnitsInStock As Object
    End Class
    

예제

다음 예제에서는 제품 재고 수량을 확인하는 사용자 지정 필드 템플릿을 보여 줍니다. 제품의 재고가 부족하면 필드 템플릿은 빨간색 전경을 사용하여 해당 값을 표시합니다.

<%@ Control Language="VB" CodeFile="UnitsInStock.ascx.vb" 
Inherits="DynamicData_FieldTemplates_UnitsInStock" %>

<asp:Label id="TextLabel1" OnDataBinding="DataBindingHandler"
Text='<%# FieldValueString %>' ></asp:Label>

<%@ Control Language="C#" CodeFile="UnitsInStock.ascx.cs" 
Inherits="DynamicData_FieldTemplates_UnitsInStock" %>

<asp:Label id="TextLabel1" OnDataBinding="DataBindingHandler"
Text='<%# FieldValueString %>' ></asp:Label>

Imports System.Web.DynamicData

Partial Public Class DynamicData_FieldTemplates_UnitsInStock
    Inherits FieldTemplateUserControl
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

    End Sub

    ' DataBinding event handler.
    Public Sub DataBindingHandler(ByVal sender As Object, _
                                  ByVal e As EventArgs)
        ' Define product understocked threshold.
        Dim underStockedThreshold As Short = 150

        ' Get the current number of items in stock.
        Dim currentValue As Short = DirectCast(FieldValue, Short)

        ' Check product stock. 
        If currentValue < underStockedThreshold Then
            ' The product is understocked, set its 
            ' foreground color to red.
            TextLabel1.ForeColor = System.Drawing.Color.Red
        End If
    End Sub

End Class
using System.Web.DynamicData;

public partial class DynamicData_FieldTemplates_UnitsInStock :  FieldTemplateUserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    // DataBinding event handler.
    public void DataBindingHandler(object sender, EventArgs e)
    {
        // Define product understocked threshold.
        short underStockedThreshold = 150;

        // Get the current number of items in stock.
        short currentValue = (short)FieldValue;

        // Check product stock. 
        if (currentValue < underStockedThreshold)
        {
            // The product is understocked, set its 
            // foreground color to red.
            TextLabel1.ForeColor = System.Drawing.Color.Red;
        }
    }

}

코드 컴파일

  • Microsoft Visual Studio 2008 서비스 팩 1 또는 Visual Web Developer 2008 Express Edition 서비스 팩 1

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

  • Dynamic Data 웹 사이트. 이를 통해 데이터베이스의 데이터 컨텍스트를 만드는 것은 물론 사용자 지정할 데이터 필드와 재정의할 메서드가 들어 있는 클래스를 만들 수 있습니다. 또한 앞에서 설명한 페이지를 사용할 환경을 만듭니다. 자세한 내용은 연습: 스캐폴딩을 사용하여 새 Dynamic Data 웹 사이트 만들기를 참조하십시오.

참고 항목

작업

방법: 데이터 모델의 데이터 필드 모양 및 동작 사용자 지정

연습: 기존 웹 사이트에 Dynamic Data 추가

개념

ASP.NET Dynamic Data 필드 템플릿 개요

ASP.NET Dynamic Data 모델 개요

ASP.NET Dynamic Data 개요