본문 바로가기
Web Program/Asp.net Lecture

HOWTO: Visual Studio .NET에서 DataGrid에 CheckBox 웹 컨트롤 사용

by 현이빈이 2009. 4. 1.
반응형

HOWTO: Visual Studio .NET에서 DataGrid에 CheckBox 웹 컨트롤 사용

이 페이지에서

모두 확대 | 모두 축소

요약
이 단계별 지침에 따라 DataGrid 컨트롤에 CheckBox 컨트롤을 추가하고 이를 Microsoft SQL Server Pubs 데이터베이...

이 단계별 지침에 따라 DataGrid 컨트롤에 CheckBox 컨트롤을 추가하고 이를 Microsoft SQL Server Pubs 데이터베이스의 Authors 테이블에 바인딩할 수 있습니다.

Visual Studio .NET Web Forms에서는 TemplateColumn 개체를 사용하여 DataGrid에 컨트롤을 추가할 수 있습니다.

요구 사항

다음은 권장되는 하드웨어, 소프트웨어 및 네트워크 인프라와 필요한 서비스 팩의 목록입니다.
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server 또는 Microsoft Windows NT 4.0 Server
이 문서에서는 사용자가 다음 내용을 잘 알고 있는 것으로 가정합니다.
  • Web Forms의 DataGrid 컨트롤, 데이터 검색 및 데이터 바인딩
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server

TemplateColumn 개체를 사용하여 DataGrid 웹 컨트롤에 CheckBox를 추가하는 방법

  1. 새 ASP.NET 웹 응용 프로그램을 만듭니다.
  2. 서버 탐색기에서 SQL Server의 Pubs 데이터베이스에 대한 연결을 만듭니다. Authors 테이블을 서버 탐색기에서 WebForm1로 끌어 SqlConnection1SqlDataAdapter1 개체를 만듭니다.
  3. SqlDataAdapter1 개체를 마우스 오른쪽 단추로 누른 다음 데이터 집합 생성을 누릅니다.
  4. 데이터 집합 선택 영역에서 새로 만들기를 누릅니다. 이름으로 DsAuthors를 입력합니다.
  5. 데이터 집합에 추가할 테이블 선택 영역에서 Authors 테이블을 선택합니다.
  6. 이 데이터 집합을 디자이너에 추가합니다. 확인란을 눌러 선택한 다음 확인을 눌러 데이터 집합을 만듭니다.
  7. 도구 상자의 DataGrid 컨트롤을 WebForm1로 끌고 이 DataGrid의 속성을 다음과 같이 설정합니다.
    표 축소표 확대
    속성 이름
    DataSource DsAuthors1
    DataMember Authors
    DataKeyField Au_id
  8. Page_Load 이벤트에 다음 코드를 추가하여 데이터 집합을 채우고 이 데이터 집합DataGrid를 바인딩합니다.
    SqlDataAdapter1.Fill(DsAuthors1)
    If Not IsPostBack Then
        DataGrid1.DataBind()
    End If
    					
  9. F5 키를 눌러 프로그램을 컴파일하고 실행합니다. DataGrid에 데이터가 표시됩니다.

UI(사용자 인터페이스)와 TemplateColumn 개체를 사용하여 DataGrid 웹 컨트롤에 CheckBox를 추가하는 방법

초기 설정이 완료되면 DataGridCheckBox 컨트롤을 추가하고 이를 데이터 집합에 바인딩하십시오. 이렇게 하려면 다음 단계를 수행하십시오.
  1. 표시할 DataGrid 열을 선택합니다.
    1. DataGrid를 마우스 오른쪽 단추로 누른 다음 속성 작성기를 누릅니다. 왼쪽 창에서 을 클릭하여 DataGrid 속성을 표시합니다.
    2. 런타임에 자동으로 열 만들기 확인란을 눌러 선택을 취소합니다.
    3. 열 목록 영역의 선택한 열 상자에 au_idau_lname 필드를 추가합니다.
    4. 선택한 열 상자에 템플릿 열을 추가하고 머리글 텍스트Contract로 변경합니다. 확인을 눌러 속성 작성기를 닫습니다.
  2. 템플릿 열을 편집하고 데이터 집합에 바인딩합니다.
    1. DataGrid를 마우스 오른쪽 단추로 누른 다음 템플릿 편집, Columns[2] - Contract를 눌러 템플릿 편집기를 엽니다.

      템플릿 편집기는 HeaderTemplate, ItemTemplate, EditItemTemplateFooterTemplate 영역으로 구성되어 있습니다. 이 중 ItemTemplate 영역을 사용합니다.
    2. ItemTemplate 속성을 사용하여 TemplateColumn의 데이터 항목 모양을 조정합니다. 이렇게 하려면 열에 항목이 표시되는 방식을 정의하는 템플릿을 만듭니다.
      1. 도구 상자의 CheckBox 컨트롤을 TemplateColumn의 ItemTemplate 영역으로 끕니다.
      2. CheckBox 컨트롤을 선택합니다. 속성 창에서 DataBindings 옵션을 찾습니다. 해당 아이콘을 눌러 DataBindings 대화 상자를 엽니다.
      3. 바인딩 가능한 속성 목록에서 Checked를 선택합니다.
      4. 단순 바인딩 영역의 Container, DataItem 목록에서 Contract를 선택합니다. 확인을 누릅니다.

        CheckBox 컨트롤의 선택 부분은 Contracts 필드에 바인딩되지만 CheckBox 컨트롤의 텍스트 부분은 바인딩되지 않고 공백으로 나타납니다.
      5. 템플릿 편집을 마우스 오른쪽 단추로 누른 다음 템플릿 편집 끝내기를 눌러 TemplateColumn 편집기를 닫고 DataGrid로 돌아갑니다.
      6. 응용 프로그램을 저장하고 테스트합니다. Contract 열은 확인란으로 표시되고 해당 속성은 SQL Server Pubs 데이터베이스에 있는 Authors 테이블의 데이터를 반영합니다.

프로그래밍 방식으로 CheckBox를 추가하는 방법

다음 샘플 코드는 프로그래밍 방식으로 DataGrid에 TemplateColumnCheckBox 컨트롤을 추가하고 데이터를 바인딩합니다. 이 샘플 코드는 먼저 TemplateColumn 컨트롤을 추가한 다음 이 TemplateColumn에 확인란을 추가합니다. 그런 다음 마지막으로 이벤트 처리기를 추가하여 데이터베이스에 CheckBox 컨트롤을 바인딩합니다.
  1. 다음 코드 샘플을 Page_Load 이벤트에 입력하거나 붙여 넣습니다. 이 코드는 TemplateColumn 개체를 만들고 해당 머리글 텍스트를 설정합니다.
    SqlDataAdapter1.Fill(DsAuthors1)
    
    'Create a new TemplateColumn object.
    Dim tcol As New TemplateColumn()
    With tcol
        .HeaderText = "CheckBox Column"
        ' Call DynamicItemTemplate to add the child controls to the Template 
        ' Column and bind them to the Data source.    
        .ItemTemplate = New DynamicItemTemplate()
    End With
    
    DataGrid1.Columns.Add(tcol)
    If Not IsPostBack Then
         DataGrid1.DataBind()
    End If
    					
  2. Public Class WebForm1, End 클래스 뒤에 다음 코드를 입력하거나 붙여 넣습니다.
    Public Class DynamicItemTemplate
        ' ITemplate - When implemented by a class, defines the Control object
        ' to which child controls and templates belong. These child controls 
        ' are in turn defined within an inline template.
        Implements ITemplate
    
        Public Overridable Overloads Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
            ' InstantiateIn - When implemented by a class, defines the Control 
            ' object to which child controls and templates belong. These child 
            ' controls are, in turn, defined within an inline template.
            ' 
            ' Create an instance of a CheckBox object.
            Dim oCheckBox As CheckBox = New CheckBox()
    
            ' When the DataBinding event of the CheckBox fires, call the sub 
            ' BindCheckBox to properly bind.  
            ' AddHandler oCheckBox.DataBinding, AddressOf BindCheckBox
            'Add the CheckBox to the controls collection.
            container.Controls.Add(oCheckBox)
        End Sub
    
    
        Public Sub BindCheckBox(ByVal sender As Object, ByVal e As EventArgs)
            'Create a new instance of a CheckBox. 
            Dim oCheckBox As CheckBox = CType(sender, CheckBox)
            Dim container As DataGridItem = CType(oCheckBox.NamingContainer, DataGridItem)
            'Evaluate the data from the Grid item and set the Checked property 
            ' appropriatly
            If container.DataItem("contract").GetType.ToString = "System.DBNull" Then
                oCheckBox.Checked = False
            Else
                oCheckBox.Checked = CBool(container.DataItem("contract"))
            End If
    
        End Sub
    End Class
    						
    참고: 바인딩 코드에는 프로세스를 쉽게 이해할 수 있도록 도와 주는 주석이 표시됩니다.
  3. 코드를 저장하고 실행합니다. TemplateColumn 및 바인딩되지 않은 CheckBox 컨트롤이 추가되었습니다.


컨트롤을 여러 번 반복하여 CheckBox의 값을 테스트하는 방법

앞의 코드 샘플에서 다음 코드 줄의 주석 처리를 제거합니다.
  'AddHandler oCheckBox.DataBinding, AddressOf BindCheckBox
				
이 줄은 CheckBox 컨트롤의 DataBinding 이벤트가 실행될 때 이벤트 처리기 Public Sub BindCheckBox를 호출합니다. BindCheckBox 프로시저는 데이터를 확인하고 현재 확인란의 Checked 속성을 올바르게 설정합니다. DataGrid는 각 행을 바인딩하므로 DataGrid의 모든 행에 대해 이 프로시저가 호출됩니다.

참조
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오. 316649  (http://support.microsoft.com/kb...

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
316649  (http://support.microsoft.com/kb/316649/ ) HOWTO: Visual Studio .NET 서버 탐색기 사용
308656  (http://support.microsoft.com/kb/308656/ ) HOWTO: Visual Basic .NET에서 SQL Server .NET 데이터 공급자를 사용하여 SQL Server 데이터베이스 열기
307860  (http://support.microsoft.com/kb/307860/ ) INFO: ASP.NET 데이터 바인딩 개요
308485  (http://support.microsoft.com/kb/308485/ ) HOWTO: Web Form 컨트롤을 사용하여 Master/Detail 페이지 만들기
317878  (http://support.microsoft.com/kb/317878/ ) FIX: DataGrid 웹 서버 컨트롤이 "<" 및 ">" 문자를 올바르게 표시하지 않는다


출처 : http://support.microsoft.com/?scid=kb;ko;306227&spid=6350&sid=global
반응형