Windows Forms DataGridView 컨트롤의 크기 조정 옵션

DataGridView 행, 열 및 헤더는 여러 항목의 결과로 크기가 변경될 수 있습니다. 다음 표에는 이러한 항목이 나와 있습니다.

발생 빈도 설명
사용자 크기 조정 사용자는 행, 열 또는 헤더 구분 기호를 끌거나 두 번 클릭하여 크기를 조정할 수 있습니다.
컨트롤 크기 조정 열 채우기 모드에서는 컨트롤 너비가 변경되면 열 너비가 변경됩니다. 예를 들어 컨트롤이 부모 양식에 도킹되고 사용자가 양식 크기를 조정할 수 있습니다.
셀 값 변경 콘텐츠 기반 자동 크기 조정 모드에서는 새 표시 값에 맞춰 크기가 변경됩니다.
메서드 호출 프로그래밍 방식 콘텐츠 기반 크기 조정을 사용하면 메서드 호출 시 셀 값에 따라 편의적 크기 조정을 수행할 수 있습니다.
속성 설정 특정 높이 및 너비 값을 설정할 수도 있습니다.

기본적으로 사용자 크기 조정이 사용 설정되고, 자동 크기 조정이 사용하지 않도록 설정되며, 열보다 더 넓은 셀 값은 클리핑됩니다.

다음 표에서는 기본 동작을 조정하거나 특정 크기 조정 옵션을 사용하여 특정 효과를 달성하는 데 사용할 수 있는 시나리오를 보여줍니다.

시나리오 구현
가로 스크롤 막대를 표시하지 않고, 전체 너비를 차지하는 비교적 적은 수의 열에 비슷한 크기의 데이터를 표시하려면 열 채우기 모드를 사용합니다. AutoSizeColumnsMode 속성을 Fill로 설정합니다.
다양한 크기의 표시 값으로 열 채우기 모드를 사용합니다. AutoSizeColumnsMode 속성을 Fill로 설정합니다. 열 FillWeight 속성을 설정하거나 컨트롤을 데이터로 채운 후 컨트롤 AutoResizeColumns 메서드를 호출하여 상대적 열 너비를 초기화합니다.
중요도가 다른 값으로 열 채우기 모드를 사용합니다. AutoSizeColumnsMode 속성을 Fill로 설정합니다. 항상 데이터의 일부를 표시하거나 특정 열에 대한 채우기 모드가 아닌 크기 조정 옵션을 사용해야 하는 열에 대해 큰 MinimumWidth 값을 설정합니다.
열 채우기 모드를 사용하여 컨트롤 배경이 표시되지 않도록 합니다. 마지막 열의 AutoSizeMode 속성을 Fill로 설정하고 다른 열에 대해 다른 크기 조정 옵션을 사용합니다. 다른 열에서 사용 가능한 공간을 너무 많이 사용하는 경우 마지막 열의 속성을 MinimumWidth로 설정합니다.
아이콘 또는 ID 열과 같은 고정 너비 열을 표시합니다. 열에 대해 AutoSizeModeNone으로 설정하고 ResizableFalse로 설정합니다. Width 속성을 설정하거나 컨트롤을 데이터로 채운 후 컨트롤 AutoResizeColumn 메서드를 호출하여 너비를 초기화합니다.
셀 콘텐츠가 변경될 때마다 크기를 자동으로 조정하여 클리핑을 방지하고 공간 사용을 최적화합니다. 자동 크기 조정 속성을 콘텐츠 기반 크기 조정 모드를 나타내는 값으로 설정합니다. 많은 양의 데이터를 사용할 때 성능 저하를 방지하려면 표시된 행만 계산하는 크기 조정 모드를 사용합니다.
여러 행을 사용할 때 성능 저하를 방지하도록 표시된 행의 값에 맞게 크기를 조정합니다. 자동 또는 프로그래밍 방식 크기 조정에 적절한 크기 조정 모드 열거형 값을 사용합니다. 스크롤하는 동안 새로 표시된 행의 값에 맞게 크기를 조정하려면 Scroll 이벤트 처리기에서 크기 조정 메서드를 호출합니다. 표시된 행의 값으로만 새 크기가 결정되도록 사용자 두 번 클릭 크기 조정을 사용자 지정하려면 RowDividerDoubleClick 또는 ColumnDividerDoubleClick 이벤트 처리기에서 크기 조정 메서드를 호출합니다.
성능 저하를 방지하거나 사용자 크기 조정을 사용 설정하도록 특정 시간에만 셀 콘텐츠에 맞게 크기를 조정합니다. 이벤트 처리기에서 콘텐츠 기반 크기 조정 메서드를 호출합니다. 예를 들어 DataBindingComplete 이벤트를 사용하여 바인딩 후 크기를 초기화하고, CellValidated 또는 CellValueChanged 이벤트를 처리하여 바인딩된 데이터 소스의 사용자 편집 또는 변경 사항을 보정하도록 크기를 조정합니다.
여러 줄 셀 콘텐츠의 행 높이를 조정합니다. 열 너비가 텍스트 단락을 표시하는 데 적합한지 확인하고 자동 또는 프로그래밍 방식의 콘텐츠 기반 행 크기 조정을 사용하여 높이를 조정합니다. 또한 여러 줄 콘텐츠가 있는 셀이 WrapMode 셀 스타일 값 True를 사용하여 표시되는지 확인합니다.

일반적으로 자동 열 크기 조정 모드를 사용하여 열 너비를 유지하거나 행 높이가 조정되기 전에 특정 너비로 설정합니다.

마우스로 크기 조정

기본적으로 사용자는 셀 값에 따라 자동 크기 조정 모드를 사용하지 않는 행, 열 및 헤더의 크기를 조정할 수 있습니다. 사용자가 열 채우기 모드와 같은 다른 모드로 크기를 조정하지 못하도록 하려면 다음 DataGridView 속성 중 하나 이상을 설정합니다.

또한 Resizable 속성을 설정하여 사용자가 개별 행 또는 열의 크기를 조정하지 못하도록 할 수 있습니다. 기본적으로 Resizable 속성 값은 열의 AllowUserToResizeColumns 속성 값과 행의 AllowUserToResizeRows 속성 값을 기반으로 합니다. 하지만 명시적으로 ResizableTrue 또는 False로 설정한 경우 지정된 값이 해당 행 또는 열에 대한 컨트롤 값을 재정의합니다. ResizableNotSet으로 설정하여 상속을 복원합니다.

NotSet이 값 속성을 복원하기 때문에 행 또는 열이 DataGridView 컨트롤에 추가되지 않은 경우를 제외하고 Resizable 속성은 NotSet 값을 반환하지 않습니다. 행 또는 열의 Resizable 속성 값이 상속되는지 여부를 결정해야 하는 경우 State 속성을 검사합니다. State 값에 ResizableSet 플래그가 포함된 경우 Resizable 속성 값은 상속되지 않습니다.

자동 크기 조정

DataGridView 컨트롤에 두 가지 종류의 자동 크기 조정이 있습니다. 열 채우기 모드와 콘텐츠 기반 자동 크기 조정입니다.

열 채우기 모드를 사용하면 컨트롤에 표시되는 열이 컨트롤의 표시 영역 너비를 채웁니다. 이 모드에 대한 자세한 내용은 Windows Forms DataGridView 컨트롤의 열 채우기 모드를 참조하세요.

행, 열 및 헤더가 셀 콘텐츠에 맞게 크기를 자동으로 조정하도록 구성할 수도 있습니다. 이 경우 셀 콘텐츠가 변경될 때마다 크기 조정이 발생합니다.

참고

가상 모드를 사용하여 사용자 지정 데이터 캐시에서 셀 값을 유지하는 경우 자동 크기 조정은 사용자가 셀 값을 편집할 때 발생하지만 CellValuePushed 이벤트 처리기 외부에서 캐시된 값을 변경할 때는 발생하지 않습니다. 이 경우 UpdateCellValue 메서드를 호출하여 컨트롤이 셀 표시를 업데이트하고 현재 자동 크기 조정 모드를 적용하도록 합니다.

콘텐츠 기반 자동 크기 조정이 한 차원에 대해서만 사용하도록 설정된 경우, 다시 말해 행이 아닌 열이나 행이 아닌 열에 대해서만 사용하도록 설정되고 WrapMode가 사용 설정된 경우 다른 차원이 변경될 때마다 크기 조정이 수행됩니다. 예를 들어 열이 아닌 행이 자동 크기 조정에 대해 구성되고 WrapMode가 사용 설정된 경우 사용자는 열 나누기를 끌어 열 너비를 변경할 수 있으며 행 높이가 자동으로 조정되어 셀 콘텐츠가 완전히 표시됩니다.

콘텐츠 기반 자동 크기 조정을 위해 행과 열을 모두 구성하고 WrapMode가 사용 설정된 경우 셀 내용이 변경될 때마다 DataGridView 컨트롤이 크기를 조정하고 새 크기를 계산할 때 이상적인 셀 높이 대 너비 비율을 사용합니다.

헤더와 행 및 컨트롤 값을 재정의하지 않는 열의 크기 조정 모드를 구성하려면 다음 DataGridView 속성 중 하나 이상을 설정합니다.

개별 열에 대한 컨트롤의 열 크기 조정 모드를 재정의하려면 AutoSizeMode 속성을 NotSet 이외의 값으로 설정합니다. 열의 크기 조정 모드는 실제로 InheritedAutoSizeMode 속성에 의해 결정됩니다. 이 속성의 값은 값이 NotSet이어서 컨트롤의 AutoSizeColumnsMode 값이 상속되는 경우를 제외하고 AutoSizeMode 속성 값을 기반으로 합니다.

대량의 데이터로 작업할 때는 주의하여 콘텐츠 기반 자동 크기 조정을 사용합니다. 성능 저하를 방지하기 위해 컨트롤의 모든 행을 분석하는 대신 표시된 행에 따라서만 크기를 계산하는 자동 크기 조정 모드를 사용합니다. 성능을 극대화하려면 새 데이터가 로드된 직후와 같이 특정 시간에 크기를 조정할 수 있도록 프로그래밍 방식 크기 조정을 대신 사용합니다.

콘텐츠 기반 자동 크기 조정 모드는 행 또는 열 Visible 속성 또는 컨트롤 RowHeadersVisible이나 ColumnHeadersVisible 속성을 false로 설정하여 숨겨진 행, 열 또는 헤더에는 영향을 미치지 않습니다. 예를 들어 큰 셀 값에 맞게 자동으로 크기가 조정된 후 열이 숨겨지면 큰 셀 값이 포함된 행이 삭제될 때 숨겨진 열의 크기가 변경되지 않습니다. 표시 유형이 변경될 때 자동 크기 조정이 발생하지 않으므로 열 Visible 속성을 다시 true로 변경해도 현재 콘텐츠에 따라 크기를 다시 계산하지 않습니다.

프로그래밍 방식 콘텐츠 기반 크기 조정은 표시 유형과 무관하게 행, 열 및 헤더에 영향을 미칩니다.

프로그래밍 방식 크기 조정

자동 크기 조정을 사용하지 않도록 설정하면 다음 속성을 통해 행, 열 또는 헤더의 정확한 너비 또는 높이를 프로그래밍 방식으로 설정할 수 있습니다.

다음 메서드를 사용하여 콘텐츠에 맞게 행, 열 및 헤더의 크기를 프로그래밍 방식으로 조정할 수도 있습니다.

이러한 메서드는 연속 크기 조정을 위해 구성하는 대신 행, 열 또는 헤더의 크기를 한 번 조정합니다. 새 크기는 클리핑 없이 모든 셀 콘텐츠를 표시하도록 자동으로 계산됩니다. InheritedAutoSizeMode 속성 값이 Fill인 열의 크기를 프로그래밍 방식으로 조정하는 경우 계산된 콘텐츠 기반 너비는 열 FillWeight 속성 값을 비례적으로 조정하는 데 사용되며, 실제로 열 너비는 이러한 새 비율에 따라 계산되므로 모든 열이 컨트롤의 사용 가능한 표시 영역을 채웁니다.

프로그래밍 방식 크기 조정은 연속 크기 조정으로 인한 성능 저하를 방지하는 데 유용합니다. 또한 사용자가 크기를 조정할 수 있는 행, 열 및 헤더와 열 채우기 모드에 대한 초기 크기를 제공하는 것도 유용합니다.

일반적으로는 특정 시점에 프로그래밍 방식 크기 조정 메서드를 호출하게 됩니다. 예를 들어 데이터를 로드한 직후 모든 열의 크기를 프로그래밍 방식으로 조정하거나 특정 셀 값이 수정된 후 프로그래밍 방식으로 특정 행의 크기를 조정할 수 있습니다.

콘텐츠 기반 크기 조정 동작 사용자 지정

DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight 또는 DataGridViewColumn.GetPreferredWidth 메서드를 재정의하거나 파생된 DataGridView 컨트롤의 보호되는 크기 조정 메서드 오버로드를 호출하여 파생된 DataGridView 셀, 행 및 열 형식을 사용할 때 크기 조정 동작을 사용자 지정할 수 있습니다. 보호되는 크기 조정 메서드 오버로드는 이상적인 셀 높이 대 너비 비율을 달성하기 위해 쌍으로 작동하도록 설계되어 지나치게 너비나 높이가 큰 셀을 방지합니다. 예를 들어 AutoResizeRows 메서드의 AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) 오버로드를 호출하고 Boolean 매개 변수에 대해 false 값을 전달하는 경우 오버로드는 행의 셀에 대한 이상적인 높이와 너비를 계산하지만 행 높이만 조정합니다. 그런 다음 AutoResizeColumns 메서드를 호출하여 열 너비를 계산된 이상적인 값으로 조정해야 합니다.

콘텐츠 기반 크기 조정 옵션

크기 조정 속성 및 메서드에 사용되는 열거형은 콘텐츠 기반 크기 조정에 대해 유사한 값을 갖습니다. 이러한 값을 사용하면 원하는 크기를 계산하는 데 사용되는 셀을 제한할 수 있습니다. 모든 크기 조정 열거형의 경우 표시된 셀을 참조하는 이름의 값은 표시된 행의 셀로 계산을 제한합니다. 행을 제외하면 많은 양의 행을 사용할 때 성능 저하를 방지하는 데 유용합니다. 헤더 또는 헤더가 아닌 셀의 셀 값으로 계산을 제한할 수도 있습니다.

참고 항목