DataGrid 컨트롤 개요(Windows Forms)

업데이트: 2007년 11월

참고:

DataGridView 컨트롤은 DataGrid 컨트롤에 새로운 기능이 추가된 것으로, 이전 컨트롤을 대체합니다. 그러나 이전 버전과의 호환성 및 앞으로의 사용 가능성을 고려하여 DataGrid 컨트롤을 유지하도록 선택할 수 있습니다. 자세한 내용은 Windows Forms DataGridView 컨트롤과 DataGrid 컨트롤의 차이점을 참조하십시오.

Windows Forms DataGrid 컨트롤은 일련의 행과 열에 데이터를 표시합니다. 가장 간단한 경우는 관계가 포함되지 않은 단일 테이블을 가진 데이터 소스에 데이터 표가 바인딩되는 경우입니다. 이러한 경우 데이터는 스프레드시트에서와 마찬가지로 단순한 행과 열에 나타납니다. 데이터를 다른 컨트롤에 바인딩하는 작업에 대한 자세한 내용은 데이터 바인딩 및 Windows Forms을 참조하십시오.

DataGrid가 여러 개의 관련 테이블을 가진 데이터에 바인딩되어 있고 해당 테이터 표에서 탐색이 가능한 경우에는 데이터 표에서 각 행마다 확대기를 표시합니다. 확대기를 통해 사용자는 부모 테이블에서 자식 테이블로 이동할 수 있습니다. 노드를 클릭하면 자식 테이블이 표시되고 뒤로 단추를 클릭하면 원래 부모 테이블이 표시됩니다. 이런 식으로 데이터 표에서는 테이블 간의 계층 관계를 표시합니다.

다음 스크린 샷에서는 여러 테이블을 가진 데이터에 바인딩된 DataGrid를 보여 줍니다.

여러 테이블을 가진 데이터에 바인딩된 DataGrid

여러 테이블을 가진 데이터에 바인딩된 DataGrid

DataGrid는 데이터 집합에 대한 사용자 인터페이스, 관련 테이블 간의 탐색, 서식 지정 및 편집 기능을 제공할 수 있습니다.

데이터를 표시하는 작업과 조작하는 작업은 서로 별개의 기능입니다. 사용자 인터페이스는 컨트롤에서 처리하지만 데이터 업데이트는 Windows Forms 데이터 바인딩 아키텍처와 .NET Framework 데이터 공급자에서 처리합니다. 그러므로 같은 데이터 소스에 바인딩된 여러 컨트롤이 동시에 존재하게 됩니다.

Visual Basic 정보:

Visual Basic 6.0의 DataGrid 컨트롤에 친숙한 사용자라면 이 컨트롤과 Windows Forms DataGrid 컨트롤이 크게 다르다는 사실을 알게 될 것입니다.

데이터 표가 DataSet에 바인딩되면 열과 행이 자동으로 만들어지고 서식이 지정되며 채워집니다. 자세한 내용은 데이터 바인딩 및 Windows Forms을 참조하십시오. DataGrid 컨트롤이 생성되고 나면 필요에 따라 열과 행을 추가하거나 삭제하거나 다시 정렬하거나 서식을 지정할 수 있습니다.

컨트롤에 데이터 바인딩

DataGrid 컨트롤이 동작하려면 디자인 타임에 DataSourceDataMember 속성을 사용하여 데이터 소스에 바인딩되거나 런타임에 SetDataBinding 메서드를 사용하여 데이터 소스에 바인딩되어야 합니다. 이렇게 바인딩하면 DataGrid가 인스턴스화된 데이터 소스 개체(예: DataSet 또는 DataTable)를 가리키게 되고 DataGrid 컨트롤에는 해당 데이터에 수행된 작업 결과가 표시됩니다. 대부분의 데이터 관련 작업은 DataGrid를 통해 수행되지 않고 데이터 소스를 통해 수행됩니다.

바인딩된 데이터 집합의 데이터가 어떤 메커니즘을 통해 업데이트되면 DataGrid 컨트롤이 변경 내용을 반영합니다. 데이터 표와 해당 테이블 스타일 및 열 스타일의 ReadOnly 속성이 false로 설정되면 데이터 집합의 데이터를 DataGrid 컨트롤을 통해 업데이트할 수 있습니다.

DataGrid에는 한 번에 하나의 테이블만 표시될 수 있습니다. 테이블 사이에 부모 자식 관계가 정의된 경우에 사용자는 관련된 테이블 사이를 이동하여 DataGrid 컨트롤에 표시할 테이블을 선택할 수 있습니다. 디자인 타임이나 런타임에 DataGrid 컨트롤을 ADO.NET 데이터 소스에 바인딩하는 작업에 대한 자세한 내용은 방법: 데이터 소스에 Windows Forms DataGrid 컨트롤 바인딩을 참조하십시오.

DataGrid의 데이터 소스로 사용할 수 있는 클래스는 다음과 같습니다.

데이터 소스가 데이터 집합인 경우, 이 데이터 집합은 폼에 있는 개체 또는 XML Web services를 통해 폼으로 전달되는 개체일 수 있습니다. 형식화된 데이터 집합이나 형식화되지 않은 데이터 집합 모두에 바인딩할 수 있습니다.

배열에 있는 요소처럼 구조체 내의 개체에서 공용 속성을 노출하는 경우에도 DataGrid 컨트롤을 이러한 추가 구조체에 바인딩할 수 있습니다. 이 경우 데이터 표에는 구조체 내에 있는 요소의 모든 공용 속성이 표시됩니다. 예를 들어, DataGrid 컨트롤을 고객 개체의 배열에 바인딩하는 경우에는 데이터 표에 해당 고객 개체의 모든 공용 속성이 표시됩니다. 이 때문에 경우에 따라서는 구조체에 바인딩할 수는 있어도 바인딩된 결과 구조체를 실제로 적용하기는 어려울 수 있습니다. 예를 들어, 정수의 배열에 바인딩할 수는 있지만 Integer 데이터 형식에서 공용 속성을 지원하지 않기 때문에 데이터 표에서 데이터를 표시할 수 없습니다.

구조체의 요소에서 공용 속성을 노출하는 경우에는 다음과 같은 구조체에 바인딩할 수 있습니다.

  • IList 인터페이스를 구현하는 모든 구성 요소 여기에는 1차원 배열이 포함됩니다.

  • IListSource 인터페이스를 구현하는 모든 구성 요소

  • IBindingList 인터페이스를 구현하는 모든 구성 요소

가능한 데이터 소스에 대한 자세한 내용은 Windows Forms에서 지원하는 데이터 소스를 참조하십시오.

데이터 표 표시

DataGrid 컨트롤의 일반적인 용도는 데이터 집합의 데이터를 단일 테이블로 표시하는 것입니다. 그러나 이 컨트롤을 사용하면 관련된 테이블을 포함하여 여러 테이블을 표시할 수도 있습니다. 데이터 표는 데이터 소스에 따라 자동으로 조정되어 표시됩니다. 다음 표에서는 다양한 구성에 따라 표시되는 내용을 보여 줍니다.

데이터 집합 내용

표시되는 내용

단일 테이블

데이터 표에 테이블이 표시됩니다.

여러 테이블

데이터 표에서 트리 뷰를 표시할 수 있으며 사용자는 이 트리 뷰에서 원하는 테이블을 찾아 표시할 수 있습니다.

관련된 여러 테이블

데이터 표에 테이블을 선택하는 데 사용할 수 있는 트리 뷰를 표시하거나 부모 테이블이 표시되도록 지정할 수도 있습니다. 사용자는 부모 테이블에 있는 레코드를 통해 관련된 자식 행을 탐색할 수 있습니다.

참고:

데이터 집합에 있는 테이블은 DataRelation을 사용하여 관계를 설정할 수 있습니다.

DataGrid 컨트롤에서 테이블을 표시하고 AllowSorting 속성이 true로 설정되어 있으면 열 머리글을 클릭하여 데이터를 다시 정렬할 수 있습니다. 사용자가 행을 추가하고 셀을 편집할 수도 있습니다.

테이블 집합 사이의 관계는 탐색할 때 부모/자식 구조를 사용하여 사용자에게 표시됩니다. 부모 테이블이 최상위 수준의 데이터이고 자식 테이블은 부모 테이블의 개별 목록으로부터 파생된 데이터 테이블입니다. 자식 테이블이 포함된 각 부모 행에는 확대기가 표시됩니다. 확대기를 클릭하면 자식 테이블에 대한 웹 형식의 링크 목록이 생성됩니다. 사용자가 이 링크를 선택하면 자식 테이블이 표시됩니다. 부모 행 표시/숨기기 아이콘(부모 행 표시/숨기기 아이콘)을 클릭하면 부모 테이블에 대한 정보가 숨겨지거나 사용자가 이 정보를 이전에 이미 숨긴 경우에는 다시 나타납니다. 사용자가 뒤로 단추를 클릭하여 이전에 표시된 테이블로 다시 이동할 수 있습니다.

열 및 행

DataGridDataGrid 컨트롤의 TableStyles 속성에 포함된 DataGridTableStyle 개체의 컬렉션으로 구성됩니다. 테이블 스타일에는 DataGridTableStyleGridColumnStyles 속성에 포함된 DataGridColumnStyle 개체의 컬렉션이 포함되어 있을 수 있습니다. TableStylesGridColumnStyles 속성은 속성 창을 통해 액세스할 수 있는 컬렉션 편집기를 사용하여 편집할 수 있습니다.

DataGrid 컨트롤과 연결된 DataGridTableStyleGridTableStylesCollection을 통해 액세스할 수 있습니다. GridTableStylesCollectionDataGridTableStyle 컬렉션 편집기를 사용하여 디자이너에서 편집하거나 DataGrid 컨트롤의 TableStyles 속성을 통해 프로그래밍 방식으로 편집할 수 있습니다.

다음 그림에서는 DataGrid 컨트롤에 포함된 개체를 보여 줍니다.

DataGrid 컨트롤에 포함된 개체

테이블 스타일과 열 스타일은 해당 MappingName 속성을 적합한 TableNameColumnName 속성으로 설정하여 DataTable 개체 및 DataColumn 개체와 동기화됩니다. 열 스타일이 없는 DataGridTableStyle이 유효한 데이터 소스에 바인딩된 DataGrid 컨트롤에 추가되고 이 테이블 스타일의 MappingName 속성이 유효한 TableName 속성으로 설정되면 이 테이블 스타일에 대해 DataGridColumnStyle 개체의 컬렉션이 만들어집니다. DataTableColumns 컬렉션에 있는 각 DataColumn에 대해 해당하는 DataGridColumnStyleGridColumnStylesCollection에 추가됩니다. GridColumnStylesCollectionDataGridTableStyleGridColumnStyles 속성을 통해 액세스됩니다. 열은 GridColumnStylesCollectionAdd 또는 Remove 메서드를 사용하여 데이터 표에 추가하거나 삭제할 수 있습니다. 자세한 내용은 방법: Windows Forms DataGrid 컨트롤에 테이블과 열 추가방법: Windows Forms DataGrid 컨트롤에서 열 삭제 또는 숨기기를 참조하십시오.

열 형식 컬렉션은 서식 지정 및 편집 기능을 사용하여 DataGridColumnStyle 클래스를 확장합니다. 모든 열 형식은 DataGridColumnStyle 기본 클래스에서 상속됩니다. 만들어지는 클래스는 DataGridColumn의 기반이 되는 DataColumnDataType 속성에 따라 다른 클래스가 만들어집니다. 예를 들어, DataType 속성이 Boolean으로 설정된 DataColumnDataGridBoolColumn과 연결됩니다. 다음 표에서는 이러한 각각의 열 형식에 대해 설명합니다.

열 형식

설명

DataGridTextBoxColumn

데이터를 형식이 있거나 없는 문자열로 받아들이고 표시합니다. 편집 기능은 단순한 TextBox에서 데이터를 편집할 때와 같습니다. DataGridColumnStyle에서 상속됩니다.

DataGridBoolColumn

true, false 및 null 값을 받아들이고 표시합니다. DataGridColumnStyle에서 상속됩니다.

열의 오른쪽 가장자리를 두 번 클릭하면 열 크기가 조정되어 열의 캡션이 모두 표시되고 엔트리 너비가 최대화됩니다.

테이블 스타일 및 열 스타일

DataGrid 컨트롤의 기본 형식을 설정하는 즉시 특정 테이블이 데이터 표 내에 표시될 때 사용될 색을 사용자 지정할 수 있습니다.

이 작업은 DataGridTableStyle 클래스의 인스턴스를 만들어 수행할 수 있습니다. 테이블 스타일은 DataGrid 컨트롤 자체의 기본 형식과 구분되는 특정 테이블의 형식을 지정합니다. 각 테이블에 대해 한 번에 하나의 테이블 스타일만 정의할 수 있습니다.

종종 특정 데이터 테이블에서 나머지 열과는 모양이 다른 특정 열을 만드는 경우가 있습니다. GridColumnStyles 속성을 사용하여 사용자 지정된 열 스타일 집합을 만들 수 있습니다.

열 스타일과 데이터 집합에 있는 열의 관계는 테이블 스타일과 데이터 테이블의 관계와 동일합니다. 각 테이블에 대해 한 번에 하나의 테이블 스타일만 정의할 수 있는 것처럼 특정 테이블 스타일에서는 각 열에 대해 하나의 열 스타일만 정의할 수 있습니다. 이러한 관계는 열의 MappingName 속성에서 정의됩니다.

테이블 스타일을 만들 때 열 스타일을 추가하지 않으면 런타임에 폼과 데이터 표가 만들어질 때 Visual Studio에서 기본 열 스타일을 추가합니다. 그러나 테이블 스타일을 만들 때 열 스타일을 추가한 경우에는 Visual Studio에서 열 스타일을 만들지 않습니다. 또한 데이터 표에 원하는 열을 표시하려면 열 스타일을 정의하고 해당 스타일에 매핑 이름을 할당해야 합니다.

열 스타일을 할당하여 데이터 표에 포함할 열을 지정하는데 열에 열 스타일이 할당되지 않았기 때문에, 데이터 표에 표시되지 않은 데이터 열을 데이터 집합에 포함할 수 있습니다. 그러나 데이터 집합에 데이터 열이 포함되어 있기 때문에 표시되지 않은 데이터를 프로그래밍 방식으로 편집할 수 있습니다.

참고:

일반적으로는 테이블 스타일을 테이블 스타일 컬렉션에 추가하기 전에 열 스타일을 만들어 열 스타일 컬렉션에 추가합니다. 컬렉션에 빈 테이블 스타일을 추가하면 열 스타일이 자동으로 생성됩니다. 그 결과, 중복된 MappingName 값을 갖는 새 열 스타일을 열 스타일 컬렉션에 추가하려고 하면 예외가 throw됩니다.

여러 열 중에서 하나의 열만 제외해야 하는 경우가 있습니다. 예를 들어, 데이터 집합에 있는 50개의 열 중에서 49개의 열만 필요한 경우가 있습니다. 이런 경우에는 필요한 49개의 열을 각각 프로그래밍 방식으로 추가하는 것보다 50개의 열을 모두 가져온 다음 프로그래밍 방식으로 열 하나를 제거하는 것이 더 쉽습니다.

형식 지정

DataGrid 컨트롤에 적용할 수 있는 형식에는 테두리 스타일, 모눈선 스타일, 글꼴, 캡션 속성, 데이터 맞춤 및 교대로 반복되는 행의 배경색이 있습니다. 자세한 내용은 방법: Windows Forms DataGrid 컨트롤 서식 지정을 참조하십시오.

이벤트

DataGrid 컨트롤은 MouseDown, EnterScroll과 같은 일반적인 컨트롤 이벤트 외에도 데이터 표 내에서의 편집 및 탐색과 관련된 이벤트를 지원합니다. CurrentCell 속성은 선택된 셀을 결정합니다. 사용자가 새 셀을 탐색하면 CurrentCellChanged 이벤트가 발생합니다. 사용자가 부모/자식 관계를 통해 새 테이블을 탐색하면 Navigate 이벤트가 발생합니다. 사용자가 자식 테이블을 보다가 뒤로 단추를 클릭하면 BackButtonClick 이벤트가 발생하고 부모 행 표시/숨기기 아이콘을 클릭하면 ShowParentDetailsButtonClick 이벤트가 발생합니다.

참고 항목

작업

방법: 데이터 소스에 Windows Forms DataGrid 컨트롤 바인딩

방법: Windows Forms DataGrid 컨트롤에 테이블과 열 추가

방법: Windows Forms DataGrid 컨트롤에서 열 삭제 또는 숨기기

방법: Windows Forms DataGrid 컨트롤 서식 지정

기타 리소스

DataGrid 컨트롤(Windows Forms)