DataGridView 의 기본 모양은 DataGrid 보다 약간 개선되었습니다. 그러나 몇 가지 빠른 수정을 통해 크게 개선 할 수 있습니다.
한 가지 문제는 DataGridView가 내용에 관계없이 모든 열에 기본 표준 너비를 제공한다는 것입니다. 결과적으로 그림 15-1에서 바인딩 된 그리드의 초기 모양은 완벽하지 않으며 ModelName 및 Description 열이 포함 된 데이터에 비해 너무 작습니다.
다행히 DataGridView에 내장 된 몇 가지 강력한 자동 크기 조정 기능을 사용할 수 있습니다. 첫 번째 결정은 전체 컨트롤에 대한 크기 조정을 제어할지 아니면 개별 열을 미세 조정할지 여부입니다. 다음 섹션에서는 옵션을 살펴 봅니다.
전체 그리드에 대한 자동 크기 조정 모드 설정
가장 간단한 방법은 AutoSizeColumnsMode 속성을 사용하여 모든 열에 적용되는 크기 조정 동작을 설정하는 것 입니다. 옵션은 표 15-4에 나와 있습니다.
표 15-4. AutoSizeColumnsMode Values
Value
Description
None AllCells
AllCellsExceptHeader
ColumnHeader
DisplayedCells
DisplayedCellsExceptHeader 채우기
열 너비는 자동으로 조정되지 않습니다. 추가 콘텐츠가 잘립니다 (누락 된 콘텐츠를 나타 내기 위해 줄임표가 추가됨). 이것이 기본값입니다.
각 열의 크기는 머리글 셀을 포함하여 가장 큰 값에 맞을만큼 충분히 커집니다.
각 열은 머리글 셀을 제외하고 가장 큰 값에 맞도록 충분히 큰 크기입니다.
각 열의 크기는 헤더의 텍스트에 맞을만큼 충분히 커집니다.
AllCells와 비슷하지만 DataGridView는 속성이 설정 될 때 현재 표시되는 행만 고려한다는 점만 다릅니다. 이 옵션은 대형 그리드의 성능을 향상시키는 데 사용됩니다. 가정은 값의 첫 번째 하위 집합에 상당히 대표적인 너비 집합이 있다는 것입니다.
DisplayedCells와 동일하지만 헤더 셀을 고려하지 않습니다.
모든 열이 사용 가능한 DataGridView를 정확히 채우도록 열 너비가 조정됩니다. 그리드 크기가 조정되면 모든 열이 비례 적으로 변경됩니다. 각 열의 MinimumWidth 및 FillWeight 속성을 조정하여 일부 열을 다른 열보다 넓게 만들 수 있습니다.
■ 팁 AllCells 기준을 사용하여 작은 테이블을 정렬하면 완벽하게 작동합니다. 그러나 매우 큰 테이블 (수천 개의 행이있는 테이블)이있는 경우 테이블에있는 모든 값의 너비를 검사해야하므로 상당한 지연이 발생합니다. 이러한 경우 DisplayedCells 값을 대신 사용하고 손상시키는 것이 훨씬 더 실용적입니다. 현재 DataGridView에 표시되는 행의 값 너비 만 검사합니다.
AutoSizeColumnsMode를 언제든지 설정하면 DataGridView가 즉시 열 크기를 조정하도록 트리거됩니다. 그림 15-6은 그리드를 AutoSizeColumnsMode.None에서 AutoSizeColumnsMode.Fill로 변경 한 다음 AutoSizeColumnsMode.DisplayCells로 변경하는 간단한 테스트 애플리케이션을 보여줍니다 (이 경우 마지막 열이 그리드에 맞지 않고 스크롤 막대가 추가됨). ).
채우기 모드를 사용하는 경우에도 사용자는 열 크기를 조정할 수 있습니다 (DataGridViewColumn 개체의 Resizable 속성을 변경하지 않았다고 가정). 열의 크기가 조정되면 다음 모든 열이 나머지 공간에 맞게 비례 적으로 확장되거나 축소됩니다. 마지막 열의 크기를 조정하면 다른 모든 열의 크기도 비례하여 조정됩니다.
그림 15-6. DataGridView에서 자동 열 크기 조정
개별 열에 대한 자동 크기 조정 모드 설정
모든 열의 크기를 같은 방식으로 조정하지 않으려면 각 열에 대해 DataGridViewColumn 개체의 AutoSizeMode 속성을 조정할 수 있습니다. 예를 들어 한 열의 크기를 None으로, 다른 열의 크기를 DisplayedCells로 조정할 수 있습니다. (기본값은 NotSet이며이 경우 값은 DataGridView.AutoSizeColumnsMode 속성에서 상속됩니다.)
비례 채우기를 사용하는 경우 더 흥미로운 시나리오가 발생합니다. 대부분의 경우 일부 열을 다른 열보다 크게 만들거나 특정 최소값 이상으로 축소 할 수 없도록 제한 할 수 있습니다. FillWeight 및 MinimumWidth 속성을 통해 쉽게 수행 할 수 있습니다.
처음에는 모든 열의 FillWeight가 100입니다. 다른 열의 FillWeight를 200으로 설정하면 너비가 두 배인 열이 생성됩니다. FillWeight가 50이면 기본값의 절반입니다. FillWeight는 절대 최소 너비를 픽셀 단위로 설정하는 MinimumWidth 속성과 달리 상대적인 의미에서만 중요합니다.
다음은 이러한 세부 정보를 구성하는 예입니다.
// 작업해야하는 열을 검색합니다. DataGridViewColumn colID = dataGridView1.Columns [ "ProductID"]; DataGridViewColumn colModel = dataGridView1.Columns [ "ModelName"]; DataGridViewColumn colDesc = dataGridView1.Columns [ "Description"];
// 설명에 훨씬 더 많은 내용을 제공합니다. colID.FillWeight = 25; colModel.FillWeight = 25; colDesc.FillWeight = 100;
//하지만 처음 두 열을 // 읽을 수 있도록 최소 너비를 유지합니다. //이 시나리오의 또 다른 옵션은 // 설명 열에 채우기 모드 만 할당하는 것입니다. colID.MinimumWidth = 75; colModel.MinimumWidth = 125; colDesc.MinimumWidth = 100;
■ 참고 안타깝게도 코드를 사용하여 열 속성을 구성해야합니다. DataGridView는 Columns 속성 수정을위한 디자인 타임 지원을 제공하지만 8 장에서 설명하는 자동 데이터 바인딩 기능 (대부분의 대규모 프로젝트에는 적합하지 않음)을 사용하지 않는 한 바인딩 된 열을 추가하거나 수정합니다.
사용자가 열의 크기를 조정하면 FillWeight가 변경됩니다. 결과적으로 추가 크기 조정 작업 (다른 열 또는 전체 그리드에서)은 약간 다르게 작동합니다. 예를 들어 사용자가 첫 번째 열을 확장하면 해당하는 더 큰 FillWeight가 자동으로 지정됩니다. 그런 다음 사용자가 전체 양식 (및 DataGridView 확장)의 크기를 조정하면 첫 번째 열에 동일한 더 큰 공간 비율이 적용됩니다.
모든 열에 채우기 모드를 사용할 필요가 없습니다. 단 하나의 열로 채우기 모드를 사용할 수 있습니다. 채우기 동작은 여전히 동일하게 작동합니다. DataGridView의 나머지 공간은 모든 채우기 모드 열로 나뉩니다.
■ 팁 전체 그리드에 채우기 모드를 사용하지 않고 DataGridView 배경이 보이지 않도록하려면 마지막 열을 구성하여 나머지 공간을 채울 수 있습니다. 해당 열의 AutoSizeColumnsMode를 Fill로 설정하기 만하면됩니다.
수동 크기 조정
가장 유연한 접근 방식이므로 자동 크기 조정이 선호됩니다. 그러나 대신 고정 픽셀 너비를 사용할 수 있습니다. AutoSizeColumnsMode를 None (개별 열 또는 전체 그리드)으로 설정 한 다음 너비 (픽셀)로 DataGridViewColumn.Width 속성을 설정하기 만하면됩니다.
사용자 사이징
기본적으로 DataGridView를 사용하면 AutoSizeColumnsMode가 None 또는 Fill 인 열의 크기를 조정할 수 있습니다. 다른 옵션 (예 : DisplayedCells)을 사용하는 경우 크기 조정이 비활성화됩니다. (그러나 다음 섹션에서이 제한을 해결하는 방법을 배웁니다.)
사용자가 열 또는 행의 크기를 모두 조정하지 못하도록하려면 DataGridView의 AllowUserToResizeRows 및 AllowUserToResizeColumns 속성을 false로 설정합니다. 해당 DataGridViewColumn 또는 DataGridViewRow의 Resizable 속성을 설정하여 사용자가 개별 열 또는 행의 크기를 조정하지 못하도록 제한 할 수도 있습니다.
프로그래밍 방식 크기 조정
DataGridView를 사용하면 다음 메서드 중 하나를 호출하여 특정 열 또는 전체 그리드에 대한 자동 크기 조정을 트리거 할 수도 있습니다.
• AutoResizeColumn ()
• AutoResizeColumns ()
• AutoResizeRows ()
• AutoResizeColumnHeadersHeight ()
• AutoResizeRowHeadersWidth ()
이러한 방법을 사용하는 데는 몇 가지 일반적인 이유가 있습니다. 우선 가능한 성능 고려 사항이 있습니다. DataGridView는 열 정렬 및 셀 편집 후를 포함하여 여러 지점에서 자동 열 크기 조정을 수행합니다. AllCells와 같은 크기 조정 모드를 사용했다면 이것은 비현실적으로 느릴 수 있습니다. 이 경우 적절한 메서드를 호출하여 원하는 시간에 정확하게 정렬을 수행하도록 선택할 수 있습니다.
프로그래밍 방식 크기 조정을 사용할 수있는 또 다른 이유는 자동 크기 조정 된 열이 사용자 크기 조정을 허용하지 않는 문제를 해결하는 것입니다. 없음 또는 채우기 이외의 크기 조정 모드를 사용하면 사용자가 열 너비를 조정할 수 없습니다. 이는 일부 상황에서 문제가 될 수 있습니다. 예를 들어 사용자가 열을 축소하여 스크롤하지 않고도 더 많은 정보를 볼 수 있도록하려는 경우입니다. 이 문제를 해결하려면 기본 크기 조정 모드를 없음으로 두되 양식이 처음로드 될 때 크기 조정 메서드 중 하나를 호출 할 수 있습니다. 다음은 세 번째 열의 크기를 조정하는 예입니다.
dataGridView1.AutoResizeColumn (2, DataGridViewAutoSizeColumnMode.AllCells);
다음은 전체 그리드의 크기를 조정하는 예입니다.
dataGridView1.AutoResizeColumns (DataGridViewAutoSizeColumnMode.AllCells);
이 메서드는 데이터를 바인딩 한 후에 호출해야합니다. 그렇지 않으면 아무 효과가 없습니다. 또한 사용자 편집 후에 사용할 수도 있습니다 (DataGridView.CellValueChanged와 같은 이벤트에 대한 응답으로).
행 크기 조정
DataGridView는 행 크기 조정을위한 유사한 모델을 제공합니다. 옵션은 표 15-4에 표시된 것과 동일하며 그리드의 모든 행 또는 특정 행의 높이를 자동 또는 수동으로 조정할 수 있습니다. 유일한 차이점은 사용하는 속성 및 메서드의 이름입니다. 예를 들어 AutoSizeRowsMode 속성은 DataGridView의 자동 크기 조정을 구성하고 DataGridViewRow.Height 속성을 사용하면 특정 픽셀 높이를 설정할 수 있습니다.
행 크기를 조정해야하는 이유는 세 가지뿐입니다.
• 글꼴 크기를 확대하여 텍스트가 하단에서 잘립니다. (마찬가지로 글꼴 크기를 줄이면 추가 공간을 없애기 위해 행 크기를 조정할 수 있습니다.)
• 이미지와 같은 다른 열 유형을 사용하고 있으며 내용이 표준 행 높이의 경계를 넘어 확장됩니다.
• 줄 바꿈 된 텍스트를 사용하고 있으며 한 번에 여러 줄을 표시하려고합니다.
처음 두 가지 옵션은 매우 간단합니다. 줄 바꿈 된 텍스트가 좀 더 흥미 롭습니다. 다음 섹션에서 설명하는 스타일 모델을 통해 작동합니다. 기본 접근 방식은 줄 바꿈 할 열을 설정하는 것입니다. 그런 다음 열 너비를 설정합니다. 마지막으로 (및 선택적으로) 자동 행 크기 조정을 사용하여 모든 텍스트에 맞게 행을 높이십시오.
다음은 소박한 설명 텍스트를 항상 볼 수 있도록하는 예입니다. 설명 열은 DataGridViewAutoSizeColumnMode.Fill을 사용하도록 설정되고 자동 행 크기는 필요에 따라 행 높이를 조정합니다.
DataGridViewColumn colDesc = dataGridView1.Columns [ "Description"]; // 가능한 한 많은 너비를 지정합니다.
colDesc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; // 열의 경계에 맞게 래핑합니다.
colDesc.DefaultCellStyle.WrapMode = DataGridViewTriState.True; // 행 자동 크기 조정을 사용하여 모든 텍스트를 표시합니다.
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; 그림 15-7은이 그리드가 크기가 조정될 때 어떻게 조정되는지 보여줍니다.
이 예에서 자동 행 크기 조정은 표시된 셀만 고려합니다. AllCells 크기를 조정하여 동일한 예제 (온라인 포함)를 시도하면 더 무기력 한 성능을 확인할 수 있습니다.
■ 참고 일반 부울 값을 찾을 것으로 예상되는 일부 위치에서 사용되는 DataGridViewTriState 열거 형을 볼 수 있습니다. 세 가지 값은 True, False 및 NotSet (포함하는 개체의 값을 상속 함)입니다. 예를 들어 NotSet 값을 사용하면 셀이 행에서 설정을 상속하고 행이 그리드에서 설정을 상속하는 등의 작업을 수행 할 수 있습니다.
그림 15-7. 줄 바꿈 된 텍스트에 맞게 행 크기 조정
댓글