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

데이터 그리드 뷰의 열 및 행 크기 조정

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

데이터 그리드 뷰는 열 및 행의 크기의 조정 동작을 사용자 지정할 수 있는 많은 옵션을 제공합니다. 일반적으로 데이터 그리드 뷰의 셀은 내용에 따라 크기가 조정되지 않습니다. 대신 셀보다 큰 모든 표시 값은 잘립니다.

 

데이터 그리드 뷰의 행 및 열의 크기는 여러 가지 동작으로 인해 변경될 수 있습니다. 사용자가 행, 열 또는 머리글 구분선을 끌거나 두 번 클릭하여 크기를 조정할 수 있고, 열 채우기 모드에서 컨트롤 너비가 바뀌면 열 너비도 자동으로 바뀝니다. 내용 기반 자동 크기 조정 모드에서는 새로운 표시 값에 맞게 크기가 바뀝니다. 프로그래밍 방식의 내용 기반 크기 조정을 사용하면 메서드가 호출될 때 셀 값에 따라 크기를 조정할 수도 있습니다.

 

기본값은 사용자 크기 조정은 활성화되고, 자동 크기 조정은 비활성화되면, 열보다 큰 값을 잘립니다. 다음은 기본 동작을 조정하거나 특정 크기 조정 옵션을 사용하여 특정 효과를 적용하는 데 사용할 수 있는 시나리오를 보여줍니다.

 

1) 가로 스크롤 막대를 표시하지 않은 채로 컨트롤의 전체 너비를 차지하는 비교적 적은 수의 열에 비슷한 크기의 데이터를 표시하려면 열 채우기 모드를 사용합니다. 'AutoSizeColumnsMode' 속성을 Fill로 설정한다.

 

 

 


기본적으로 사용자 크기 조정은 활성화되고, 자동 크기 조정은 비활성화되며, 열보다 큰 셀 값은 잘린다.


다음은 기본 동작을 조정하거나 특정 크기 조정 옵션을 사용하여 특정 효과를 적용하는 데 사용할 수 있는 시나리오를 보여준다.


1. 가로 스크롤 막대를 표시하지 않은 채로 컨트롤의 전체 너비를 차지하는 비교적 적은 수의 열에 비슷한 크기의 데이터를 표시하려면 열 채우기 모드를 사용한다. AutoSizeColumnsMode 속성을 Fill로 설정한다.


2. 다양한 크기의 표시 값과 함께 열 채우기 모드를 사용한다. AutoSizeColumnsMode 속성을 Fill로 설정한다. 열의 FillWeight 속성을 설정하거나 컨트롤에 데이터를 채운 후 컨트롤의 AutoResizeColumns 메서드를 호출하여 상대 열 너비를 초기화한다.


3. 다양한 중요도 값과 함께 열 채우기 모드를 사용한다. AutoSizeColumnsMode 속성을 Fill로 설정한다. 데이터의 일부를 항상 표시해야 하는 열에 대해 큰 MinimumWidth 값을 설정하거나 특정 열에 채우기 모드 이외의 크기 조정 옵션을 사용한다.


4. 컨트롤 배경을 표시하지 않으려면 열 채우기 모드를 사용한다. 마지막 열의 AutoSizeMode 속성을 Fill로 설정하고 다른 열에는 다른 크기 조정 옵션을 사용한다. 사용할 수 있는 공간을 다른 열에서 너무 많이 사용하고 있다면 마지막 열의 MinimumWidth 속성을 설정한다.


5. 아이콘 또는 ID 열과 같은 고정 너비 열을 표시한다. 해당 열의 AutoSizeMode를 None으로 설정하고 Resizable을 False로 설정한다. Width 속성을 설정하거나 컨트롤에 데이터를 채운 후 컨트롤의 AutoResizeColumn 메서드를 호출하여 너비를 초기화한다.


6. 내용이 잘리는 것을 방지하고 사용 공간을 최적화하려면 셀 내용이 바뀔 때마다 크기를 자동으로 조정한다. 자동 크기 조정 속성을 내용 기반 크기 조정 모드를 나타내는 값으로 설정한다. 대용량 데이터 작업을 수행할 때 성능 저하를 방지하려면 표시된 행만 계산하는 크기 조정 모드를 사용한다.


7. 행 수가 많은 경우 성능 저하를 방지하려면 표시된 행에 있는 값에 맞게 크기를 조정한다. 적절한 크기 조정 모드 열거형 값과 자동 또는 프로그래밍 방식의 크기 조정을 사용한다. 스크롤하는 동안 새로 표시되는 행의 값에 맞게 크기를 종정하려면 Scroll 이벤트 처리기의 크기 조정 메서드를 호출한다. 표시된 행의 값만 새 크기를 결정하도록 사용자의 두 번 클릭 크기 조정을 사용자 지정하려면 RowDividerDoubleClick 또는 ColumnDividerDoubleClick 이벤트 처리기의 크기 조정 메서드를 호출한다.


8. 성능 저하를 방지하거나 사용자 크기 조정을 활성화하려면 특정 시간에만 셀 내용에 맞게 크기를 조정한다. 이벤트 처리기의 내용 기반 크기 조정 메서드를 호출한다. 예를 들어, 바인딩 후 DataBindingComplete 이벤트를 사용하여 크기를 초기화하고 CellValidated 또는 CellValueChanged 이벤트를 처리하여 바인딩된 데이터 소스의 사용자 편집 또는 변경 내용이 보완되도록 크기를 조정한다.


9. 여러 줄로 이루어진 셀 내용의 행 높이를 조정한다. 열 너비가 텍스트 단락을 표시하기에 적합한지 확인하고 자동 또는 프로그래밍 방식의 내용 기반 행 크기 조정을 사용하여 높이를 조정한다. 또한 true의 WarpMode 셀 스타일 값을 사용하여 여러 줄 내용을 가진 셀이 표시되도록 한다. 




마우스로 크기 조절

 

기본적으로 사용자는 셀 값을 기준으로 자동 크기 조정 모드를 사용하지 않는 행, 열 및 머리글의 크기를 조정할 수 있다. 사용자가 열 채우기 모드와 같은 그 밖의 모드를 사용하여 크기를 조정하지 못하도록 하려면 다음 DataGridView 속성 중 하나 이상을 설정한다.


- AllowUserToResizeColumns

- AllowUserToResizeRows

- ColumnHeadersHeightSizeMode

- RowHeaderWidthSizeMode


행이나 열의 Resizable 속성을 설정하여 개별 행이나 열의 크기를 조정하지 못하도록 할 수도 있다. 기본적으로 Resizable 속성 값은 열의 경우 AllowUserToResizeColumns 속성 값을 기반으로 하고 행의 경우 AllowUserToResizeRows 속성 값을 기반으로 한다. 그러나 Resizable을 true 또는 False로 명시적으로 설정한 경우 지정된 값은 해당 행 또는 열에 대한 컨트롤 값을 재정의한다.



자동 크기 조정


DataGridView 컨트롤에는 열 채우기 모드 및 내용 기반 자동 크기 조정이라는 두 종류의 자동 크기 조정이 있다.


열 채우기 모드를 사용하면 컨트롤에 표시되는 열이 컨트롤의 표시 영역의 너비를 채운다. 이 컨트롤은 모든 열의 너비를 컨트롤의 MinimumWidth 속성 값보다 크거나 같게 유지해야 하는 경우에만 가로 스크롤 막대를 표시한다.


각 열의 크기 조정 동작은 InheritedAutoSizemode 속성에 따라 결정된다. 이 속성의 값은 열의 AutoSizeMode 속성에서 상속되면, 열 값의 Notset인 경우에는 컨트롤의 AutoSizeColumnsMode 속성에서 상속된다.


각 열은 각기 다른 크기 모드를 가질 수 있지만 크기 모드가 Fill인 모든 열은 다른 열에서는 사용하지 않는 표시 영역 너비를 공유한다. 이 너비는 채우기 모드 열의 FillWeight 속성 값 비율에 따라 해당 열에 할당된다. 예를 들어, FillWeight 값이 100과 200인 두 개의 열이 있는 경우 두 번째 열의 너비는 첫 번째 열의 너비의 두 배가 된다.


내용 기반 자동 크기 조정이 1차원에 대해서만 활성화되어 있고 WrapMode도 활성화된 경우에는 다른 차원이 바뀔 때도 항상 크기 조정이 발생한다. 예를 들어, 열은 제외하고 행에 대해서만 자동 크기 조정을 구성하고 WrapMode를 활성화한 경우 사용자는 열 구분선을 끌어서 열 너비를 변경할 수 있으며, 이 경우 행 높이는 셀 내용이 모두 표시되도록 자동으로 조정된다.




고정 너비 열을 만들려면 AutoSizeMode 속성을 None으로, Resizable 속성을 False로, ReadOnly속성을 true, Width 속성을 적절한 값으로 설정한다.


Dim idColumn As New DataGridViewTextBoxColumn()

idColumn.HeaderText = "ID"

idColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.None

idColumn.Resizable = DataGridViewTriState.False idColumn.ReadOnly = True

idColumn.Width = 20



해당 내용에 맞게 크기를 조정하는 열을 만들려면 AutoSizeMode 속성을 내용 기반 크기 조정 모드를 설정한다.


Dim titleColumn As New DataGridViewTextBoxColumn()

titleColumn.HeaderText = "Title"

titleColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader



크기 및 중요성이 변동하는 값에 대한 채우기 모드 열을 만들려면 DataGridView.AutoSizeColumnsMode 속성을 Fill로 설정하여 이 값을 재정의하지 않는 모든 열의 크기 조정 모드를 설정한다. 열의 FillWeight 속성을 평균 내용 너비에 비례하는 값으로 설정한다. 중요한 열의 MinimumWidth 속성은 내용의 일부를 표시하도록 설정한다.


dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill


Dim subTitleColumn As new DataGridViewTextBoxColumn()

subTitleColumn.HeaderText = "Subtitle"

subTitleColumn.MinimumWidth = 50

subTitleColumn.FillWeight = 100


Dim summaryColumn As new DataGridViewTextBoxColumn()

summaryColumn.HeaderText = "Summary"

summaryColumn.MinimumWidth = 50

summaryColumn.FillWeight = 200