Windows Forms DataGridView 컨트롤의 셀 스타일

DataGridView 컨트롤 내의 각 셀에는 텍스트 서식, 배경색, 전경색 및 글꼴과 같은 고유한 스타일이 있을 수 있습니다. 그러나 일반적으로 여러 셀은 특정 스타일 특성을 공유합니다.

스타일을 공유하는 셀 그룹에는 특정 행 또는 열 내의 모든 셀, 특정 값이 포함된 모든 셀 또는 컨트롤의 모든 셀이 포함될 수 있습니다. 이러한 그룹이 겹치므로 각 셀은 둘 이상의 위치에서 스타일 지정 정보를 가져올 수 있습니다. 예를 들어 DataGridView 컨트롤의 모든 셀에서 동일한 글꼴을 사용하지만 통화 열의 셀만 통화 형식을 사용하고 음수가 있는 통화 셀만 빨간색 전경색을 사용하도록 할 수 있습니다.

DataGridViewCellStyle 클래스

DataGridViewCellStyle 클래스에는 비주얼 스타일과 관련된 다음 속성이 포함되어 있습니다.

이 클래스에는 서식과 관련된 다음 속성도 포함됩니다.

이러한 속성 및 기타 셀 스타일 속성에 대한 자세한 내용은 DataGridViewCellStyle 참조 설명서 및 아래 참고 섹션에 나열된 항목을 참조하세요.

DataGridViewCellStyle 개체 사용

DataGridView, DataGridViewColumn, DataGridViewRowDataGridViewCell 클래스 및 해당 파생 클래스의 다양한 속성에서 DataGridViewCellStyle 개체를 검색할 수 있습니다. 이러한 속성 중 하나가 아직 설정되지 않은 경우 해당 값을 검색하면 새 DataGridViewCellStyle 개체가 생성됩니다. 사용자 고유의 DataGridViewCellStyle 개체를 인스턴스화하고 이러한 속성에 할당할 수도 있습니다.

여러 DataGridView 요소 간에 DataGridViewCellStyle 개체를 공유하여 스타일 정보가 불필요하게 중복되는 것을 방지할 수 있습니다. 컨트롤, 열 및 행 수준에서 설정된 스타일이 각 수준을 기준으로 셀 수준까지 필터링되므로 위의 수준과 다른 각 수준에서 해당 스타일 속성만 설정하여 스타일 중복을 방지할 수도 있습니다. 다음은 스타일 상속 섹션에서 자세히 설명합니다.

다음 표에서는 DataGridViewCellStyle 개체를 얻거나 설정하는 기본 속성을 나열합니다.

속성 클래스 Description
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRow 및 파생 클래스에서 전체 컨트롤(머리글 셀 포함), 열 또는 행의 모든 셀에서 사용되는 기본 스타일을 가져오거나 설정합니다.
RowsDefaultCellStyle DataGridView 컨트롤의 모든 행에서 사용하는 기본 셀 스타일을 가져오거나 설정합니다. 머리글 셀은 포함되지 않습니다.
AlternatingRowsDefaultCellStyle DataGridView 컨트롤의 행을 번갈아 가며 사용하는 기본 셀 스타일을 가져오거나 설정합니다. 원장과 유사한 효과를 만드는 데 사용됩니다.
RowHeadersDefaultCellStyle DataGridView 컨트롤의 행 머리글에 사용되는 기본 셀 스타일을 가져오거나 설정합니다. 비주얼 스타일을 사용하는 경우 현재 테마로 재정의됩니다.
ColumnHeadersDefaultCellStyle DataGridView 컨트롤의 열 머리글에 사용되는 기본 셀 스타일을 가져오거나 설정합니다. 비주얼 스타일을 사용하는 경우 현재 테마로 재정의됩니다.
Style DataGridViewCell 및 파생 클래스에서 셀 수준에서 지정된 스타일을 가져오거나 설정합니다. 이러한 스타일은 상위 수준에서 상속된 스타일을 재정의합니다.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumn 및 파생 클래스에서 상위 수준에서 상속된 스타일을 포함하여 셀, 행 또는 열에 현재 적용된 모든 스타일을 가져옵니다.

위에서 설명한 대로 스타일 속성의 값을 가져오면 속성이 이전에 설정되지 않은 경우 새 DataGridViewCellStyle 개체가 자동으로 인스턴스화됩니다. 이러한 개체를 불필요하게 만들지 않도록 행 및 열 클래스에는DefaultCellStyle 속성이 설정되었는지 여부를 확인할 수 있는 HasDefaultCellStyle 속성이 있습니다. 마찬가지로 셀 클래스에는 Style 속성이 설정되었는지 여부를 나타내는 HasStyle 속성이 있습니다.

각 스타일 속성에는 DataGridView 컨트롤에 해당하는 PropertyNameChanged 이벤트가 있습니다. 행, 열 및 셀 속성의 경우 이벤트의 이름은 “Row”, “Column” 또는 “Cell”(예: RowDefaultCellStyleChanged)로 시작합니다. 이러한 각 이벤트는 해당 스타일 속성이 다른 DataGridViewCellStyle 개체로 설정된 경우에 발생합니다. 이러한 이벤트는 스타일 속성에서 DataGridViewCellStyle 개체를 검색하고 해당 속성 값을 수정할 때 발생하지 않습니다. 셀 스타일 개체 자체의 변경 내용에 응답하려면 CellStyleContentChanged 이벤트를 처리합니다.

스타일 상속

DataGridViewCell해당 InheritedStyle 속성에서 모양을 가져옵니다. 이 속성에서 반환된 DataGridViewCellStyle 개체는 DataGridViewCellStyle 형식의 속성 계층 구조에서 해당 값을 상속합니다. 이러한 속성은 헤더가 아닌 셀의 InheritedStyle 값을 가져오는 순서대로 아래에 나열됩니다.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (홀수 인덱스 번호가 있는 행의 셀에만 해당)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

행 및 열 머리글 셀의 경우 InheritedStyle 속성은 지정된 순서로 다음 원본 속성 목록의 값으로 채워집니다.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle 또는 DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

다음 다이어그램에서는 이 프로세스를 보여 줍니다.

DataGridViewCellStyle 형식의 속성

특정 행 및 열에서 상속된 스타일에 액세스할 수도 있습니다. 열 InheritedStyle 속성은 다음 속성에서 해당 값을 상속합니다.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

InheritedStyle 속성은 다음 속성에서 해당 값을 상속합니다.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (홀수 인덱스 번호가 있는 행의 셀에만 해당)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

InheritedStyle 속성에서 반환된 DataGridViewCellStyle 개체의 각 속성에 대해 해당 속성이 DataGridViewCellStyle 클래스 기본값이 아닌 값으로 설정된 적절한 목록의 첫 번째 셀 스타일에서 속성 값을 가져옵니다.

다음 표에서는 예제 셀의 ForeColor 속성 값이 포함하는 열에서 상속되는 방법을 보여 줍니다.

DataGridViewCellStyle 형식의 속성 검색된 개체의 예제 ForeColor
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

이 경우 셀 행의 Color.Red 값은 목록의 첫 번째 실제 값입니다. 셀의 InheritedStyleForeColor 속성 값이 됩니다.

다음 다이어그램에서는 다른 DataGridViewCellStyle 속성이 다른 위치에서 값을 상속하는 방법을 보여 줍니다.

DataGridView 속성 값 상속

스타일 상속을 활용하여 여러 위치에서 동일한 정보를 지정하지 않고도 전체 컨트롤에 적절한 스타일을 제공할 수 있습니다.

헤더 셀은 설명된 대로 스타일 상속에 참여하지만 DataGridView 컨트롤의 ColumnHeadersDefaultCellStyleRowHeadersDefaultCellStyle 속성과 함께 반환된 개체에는 DefaultCellStyle 속성에서 반환된 개체의 속성 값을 재정의하는 초기 속성 값이 있습니다. DefaultCellStyle 속성에서 반환된 개체의 속성을 행 및 열 머리글에 적용하려면 ColumnHeadersDefaultCellStyleRowHeadersDefaultCellStyle에서 반환된 개체의 해당 속성을 DataGridViewCellStyle 클래스에 대해 표시된 기본값으로 설정해야 합니다.

참고

비주얼 스타일을 사용하는 경우 행 및 열 머리글(TopLeftHeaderCell 제외)은 현재 테마에 의해 자동으로 스타일이 지정되어 이러한 속성으로 지정된 스타일을 재정의합니다.

DataGridViewButtonColumn, DataGridViewImageColumn, 및 DataGridViewCheckBoxColumn 형식은 열 DefaultCellStyle 속성에서 반환된 개체의 일부 값도 초기화합니다. 자세한 내용은 이러한 형식에 대한 참조 설명서를 참조하세요.

동적으로 스타일 설정

특정 값을 사용하여 셀 스타일을 사용자 지정하려면 DataGridView.CellFormatting 이벤트에 대한 처리기를 구현합니다. 이 이벤트에 대한 처리기는 DataGridViewCellFormattingEventArgs 형식의 인수를 받습니다. 이 개체에는 DataGridView 컨트롤의 위치와 함께 서식이 지정되는 셀의 값을 확인할 수 있는 속성이 포함되어 있습니다. 이 개체에는 서식을 지정할 셀의 InheritedStyle 속성 값으로 초기화되는 CellStyle 속성도 포함되어 있습니다. 셀 스타일 속성을 수정하여 셀 값 및 위치에 적합한 스타일 정보를 지정할 수 있습니다.

참고

RowPrePaintRowPostPaint 이벤트는 이벤트 데이터에서 DataGridViewCellStyle 개체도 받지만, 이 경우 읽기 전용을 위해 행 InheritedStyle 속성의 복사본이며 변경 내용은 컨트롤에 영향을 미치지 않습니다.

DataGridView.CellMouseEnterCellMouseLeave 이벤트와 같은 이벤트에 대한 응답으로 개별 셀의 스타일을 동적으로 수정할 수도 있습니다. 예를 들어CellMouseEnter 이벤트에 대한 처리기에서 셀 배경색의 현재 값(셀의 Style 속성을 통해 검색됨)을 저장한 다음 마우스로 셀을 가리킬 때 셀을 강조 표시하는 새 색으로 설정할 수 있습니다. CellMouseLeave 이벤트에 대한 처리기에서 배경색을 원래 값으로 복원할 수 있습니다.

참고

특정 스타일 값이 설정되었는지 여부에 관계없이 셀의 Style 속성에 저장된 값을 캐싱하는 것이 중요합니다. 스타일 설정을 일시적으로 바꾸는 경우 원래 “설정 안 함” 상태로 복원하면 셀이 더 높은 수준에서 스타일 설정을 상속하는 것으로 돌아갑니다. 스타일이 상속되는지 여부에 관계없이 셀에 적용되는 실제 스타일을 결정해야 하는 경우 셀의 InheritedStyle 속성을 사용합니다.

참고 항목