VB.NET 2008/VB - 데이터 그리드 뷰

DataGridView 개요 및 셀, 열, 행

본클라쓰 2011. 4. 26. 11:13

 

데이터 그리드 뷰(DataGridView) 컨트롤은 데이터 그리드(DataGrid) 컨트롤에 새로운 기능이 추가된 것으로, 이전 컨트롤을 대체합니다.

 

데이터 그리드 뷰 컨트롤을 사용하면 여러 종류의 데이터 소스에서 가져온 표 형식의 데이터를 표시하고 편집할 수 있습니다. 데이터를 데이터 그리드 뷰 컨트롤에 바인딩하는 작업이 많은 경우 데이터 소스(DataSource) 속성을 설정하는 작업과 마찬가지로 단순합니다. 여러 목록이나 표가 포함된 데이터 소스에 바인딩하는 경우에는 데이터 멤버(DataMember) 속성을 바인딩할 목록이나 표를 지정하는 문자열로 설정합니다.

 

 

 

데이터 그리드 뷰의 기본 기능

 

1) 테이블을 세로로 스크롤할 때 계속 표시되는 열 머리글과 행 머리글을 자동으로 표시한다.

2) 현재 행에 대한 선택 영역 표시기가 포함된 행 머리글이 있다.

3) 사용자가 열 구분선을 두 번 클릭하여 크기를 자동으로 조정할 수 있는 열이 있다.

4) 첫 번째 셀에 선택 영역 표시 직사각형이 있다. 

5) 응용 프로그램의 Main 메서드에 EnableVisualStyles 메서드를 호출하는 경우 Windows XP와 Windows Server 2003 제품군의 비주

    얼 스타일을 자동으로 지원한다.

 

 

 

데이터 그리드 뷰의 편집 기능

 

1) 사용자가 셀에서 두 번 클릭하거나 F2키를 누르면 해당 셀이 자동으로 편집 모드로 바꿔서 사용자가 입력하는 대로 셀의 내용이

    업데이트 된다.

2) 사용자가 테이블 끝으로 스크롤하면 새 레코드를 추가하기 위한 행이 있음을 확인할 수 있다. 사용자가 이 행을 클릭하면 새 행

    이 기본값으로 데이터 그리드 뷰 컨트롤에 추가된다. 사용자가 Esc 키를 누르면 새 행이 사라진다. 

3) 사용자가 행 머리글을 클릭하면 전체 행이 선택된다.

 

 

 

데이터 소스를 사용한 바인딩된 데이터 그리드 뷰가 수행하는 작업

 

1) 자동으로 데이터 소스의 열 이름을 열 머리글 텍스트로 사용한다.

2) 컨트롤이 데이터 소스의 내용으로 채워진다.

3) 테이블에 표시되는 각 행의 대한 행을 만든다.

4) 사용자가 열 머리글을 클릭하면 내부 데이터를 기준으로 행을 자동으로 정렬한다.

 

 

이 때 데이터 그리드 뷰에 바인딩할 수 있는 클래스 인스턴스는 다음과 같습니다.

 

1) 1차원 배열을 비롯한 IList 인터페이스를 구현하는 모든 클래스

2) DataTable 및 DataSet 과 같은 IListSource 인터페이스를 구현하는 모든 클래스

3) BindingList 클래스와 같은 IBindingList 인터페이스를 구현하는 모든 클래스

4) BindingSource 클래스와 같은 IBindingListView 인터페이스를 구현하는 모든 클래스

 

데이터 그리드 뷰에 바인딩을 할 경우, 일반적으로 BindingSource 구성 요소에 바인딩한 다음 BindingSource 구성 요소를 다른 데이터 소스에 바인딩하거나 비즈니스 개체로 구성 요소를 채웁니다. BindingSource 구성 요소는 다양한 데이터 소스에 바인딩할 수 있고 많은 데이터 바인딩 문제를 자동으로 해결할 수 있기 때문에 데이터 소스로 많이 사용됩니다.

 

 

 

데이터 그리드 뷰의 모양

 

데이터 그리드 뷰 컨트롤은 매우 다양하게 구성하고 확장할 수 있으며, 모양과 동작을 사용자 지정할 수 있는 여러 가지 속성, 메소드 및 이벤트를 제공합니다. 윈도우 폼 응용 프로그램에서 표 형식의 데이터를 표시하려면 데이터 그리드(DataGrid) 등의 다른 컨트롤을 사용하기 전에 데이터 그리드 뷰 컨트롤을 먼저 사용하는 것이 좋습니다. 읽기 전용 값으로 채워진 작은 표를 표시하거나 수 백만 개의 레코드가 들어 있는 테이블을 사용자가 편집할 수 있도록 하려는 경우 데이터 그리드 뷰 컨트롤을 사용하면 프로그래밍하기 쉽고 메모리를 효율적으로 사용할 수 있습니다.

 

 

 

1. 데이터 그리드 뷰 셀

 

DataGridViewCell은 데이터 그리드 뷰의 셀을 나타냅니다. 셀은 데이터 그리드 뷰이 상호 작용에 사용되는 기본 단위입니다. 셀을 중심으로 표시 작업이 수행되고 셀을 통해 데이터 입력이 수행됩니다. DataGridViewRow 클래스의 Cells 컬렉션을 사용하여 셀을 액세스할 수 있으며, 데이터 그리드 뷰 컨트롤의 SelectedCells 컬렉션을 사용하여 선택한 셀에 액세스할 수 있습니다.

 

DataGridViewCell은 고유 모양 및 그리기 기능을 윈도우 폼 컨트롤과 똑같은 방법으로 제어하지 않습니다. 대신 데이터 그리드 뷰가 DataGridViewCell 개체의 모양을 처리합니다.  데이터 그리드 뷰 컨트롤의 속성 및 이벤트와 상호 작용을 통해 셀의 모양과 동작에 상당한 영향을 줄 수 있습니다. 데이터 그리드 뷰 컨트롤 기능 이상의 특별한 사용자가 지정 작업이 필요한 경우에는 DataGridViewCell 또는 자식 클래스에서 파생되는 고유 클래스를 구현할 수 있습니다.

 

DataGridViewCell 에서 파생된 클래스들

 

 · DataGridViewTextBoxCell

 · DataGridViewButtonCell

 · DataGridViewLinkCell

 · DataGridViewCheckBoxCell

 · DataGridViewComboBoxCell

 · DataGridViewImageCell

 · DataGridViewHeaderCell

 · DataGridViewRowHeaderCell

 · DataGridViewColumnHeaderCell

 · DataGridViewTopLeftHeaderCell

 

 

2. 데이터 그리드 뷰 컬럼

 

데이터 그리드 뷰 컨트롤에 연결된 데이터 소스의 스키마는 데이터 그리드 뷰 컨트롤의 열에 표시됩니다. 데이터 그리드 뷰 컨트롤은 AutoGenerateColumns 속성을 true로 설정하면 바인딩 된 데이터 소스에 포함된 데이터 형식에 적합한 기본 열 형식을 사용하여 열이 자동으로 생성됩니다. 데이터 그리드 뷰의 Columns 컬렉션을 사용하여 데이터 그리드 뷰 컨트롤의 열에 액세스할 수 있습니다. 또한 SelectedColumns 컬렉션을 사용하여 선택한 열에 액세스할 수 있습니다.

 

DataGridViewColumns 에서 파생된 클래스

 

1) DataGridViewTextBoxColumn

: 숫자 및 문자열과 같은 텍스트 기반 값에 사용되는 일반적인 목적인 열 형식입니다. TextBox 컨트롤은 편집모드에서 활성 셀에 표시되면 사용자가 셀 값을 수정할 수 있게 합니다. 또한 표시된 문자열이 자동 변환됩니다. 사용자가 입력 또는 수정한 값은 자동으로 구문 분석되어 해당 데이터 형식의 셀 값을 만듭니다. 이러한 변환은 DataGridView 컨트롤의 CellFormatting 및 Cellpasing 이벤트를 처리하여 지정할 수 있습니다. 셀 값의 데이터 형식은 ValueType 속성에 저장됩니다. 

 

2) DataGridViewCheckBoxColumn

: Boolean 및 CheckState 값과 함께 사용됩니다. 일반적으로 확인란 셀 값은 다른 데이터처럼 저장소용이거나 대량 작업을 수행하기 위한 것입니다. 사용자가 셀을 클릭할 때 즉시 응답이 이루어지도록 하려면 CellClick 이벤트를 처리하면 됩니다. 그러나 이 이벤트는 셀 값이 업데이트되기 전에 발생합니다. 클릭할 때 새 값이 필요한 경우 선택할 수 있는 한 가지 방법은 현재 값을 기반으로 예상 값을 계산하는 것입니다. 또 다른 방법으로는 변경 사항을 즉시 커밋하고 CellValueChanged 이벤트를 처리하여 변경 사항에 응답하는 것입니다. 셀 클릭시 변경 사항을 커밋하려면 CurrentCellDirtyStateChanged 이벤트를 처리해야 합니다. 처리기에 현재 셀의 확인란 셀이면 CommitEdit 메서드를 호출하여 Commit값에 전달합니다. 

 

3) DataGridViewImageColumn

: 이미지를 표시하는 데 사용됩니다. 이미지 열은 데이터 소스에서 자동으로 채우거나, 바인딩되지 않은 열에 대해 수동으로 채우거나, CellFormatting 이벤트의 처리기에서 동적으로 채울 수 있습니다. 데이터 소스에서 이미지 열을 자동으로 채우는 방법은 Image 클래스에서 지원하는 모든 형식 및 마이크로 엑세스와 NorthWind 샘플 데이터베이스에서 사용되는 OLE Picture 형식을 비롯하여 여러 이미지 형식으로 바이트 배열에 사용됩니다. 

 

4) DataGridViewButtonColumn

: 단추가 포함된 셀의 열을 표시할 때 사용합니다. 사용자가 특정 레코드에 대해 순서 지정 또는 별도의 창에 자식 레코드 표시와 같은 작업을 쉽게 수행하는 방법을 제공하려는 경우에 유용합니다. 단추열은 데이터 그리드 뷰 컨트롤에 바인딩 될 때 자동으로 생성되지 않습니다. 단추 열을 사용하려면 수동으로 단추 열을 만든 다음 DataGridView.Columns 속성으로 반환된 컬렉션에 추가해야 합니다. CellClick 이벤트를 처리하면 사용자가 단추 셀을 클릭하는 경우 응답이 이루어지도록 할 수 있습니다.

 

5) DataGridViewComboBoxColumn

: 드룹다운 목록 상자가 포함된 셀의 열을 표시할 수 있습니다. ComboBox의 드롭다운 목록을 채우는 방법은 Items 속성에서 반환된 컬렉션을 통해 수동으로 또는 데이터 소스 속성을 통해 목록을 채울 수 있습니다. 콤보 상자는 바인딩 될 때 자동으로 생성되지 않습니다. 콤보 상자열을 사용하려면 수동으로 콤보 상자 열을 만든 다음 Columns 속성에 반환된 컬렉션을 추가해야 합니다.

 

6) DataGridViewLindColumn

: 하이퍼링크가 포함된 셀의 열을 표시할 수 있습니다. 이렇게 하면 데이터 소스에 URL값이 있는 경우 또는 자식 레코드가 있는 창을 여는 동작처럼 특별한 동작에 대한 단추 열을 대체하려는 경우에 유용합니다.

 

 

 

3. 데이터 그리드 뷰 행

 

DataGridViewRow 클래스는 데이터 그리드 뷰 컨트롤에 연결된 데이터 저장소에 있는 레코드의 데이터 필드를 표시합니다. Rows 컬렉션을 사용하여 데이터 그리드 뷰 컨트롤의 행에 액세스할 수 있습니다. SelectedRows 컬렉션을 사용하여 선택한 행에 액세스할 수 있습니다. 

 

일반적으로 필요한 경우는 아니지만 DataGridViewRow 클래스에서 고유한 형식을 파생시킬 수 있습니다. 데이터 그리드 뷰 컨트롤에는 해당  DataGridViewRow 개체의 동작을 사용자 지정하는데 사용되는 여러 가지 행 관련 이벤트와 속성이 있습니다.

 

DataGridView 컨트롤의 AllowUserToAddRows 속성을 활성화하면 새 행을 추가할 수 있는 특수 행이 마지막 행으로 표시됩니다. 이 행은 Rows 컬렉션의 일부이지만 특수 기능을 가지므로 주의가 필요합니다.