가상 모드를 사용하면 DataGridView 컨트롤과 사용자 지정 데이터 캐시 간의 상호 작용을 관리할 수 있습니다. 가상 모드를 구현하려면 VirtualMode 속성을 true로 설정하고, 여기에 설명된 하나 이상의 이벤트를 처리합니다. 일반적으로 CellValueNeeded 이벤트를 처리하여 컨트롤에서 데이터 캐시의 값을 조회할 수 있도록 합니다.
바인딩 모드 및 가상 모드
가상 모드는 바인딩 모드를 보완하거나 교체해야 하는 경우에만 필요합니다. 바운드 모드에서는 DataSource 속성을 설정하면 컨트롤이 자동으로 지정된 원본에서 데이터를 로드하고, 사용자 변경사항을 다시 제출합니다. 표시되는 바인딩된 열을 제어할 수 있으며 데이터 소스 자체는 일반적으로 정렬과 같은 작업을 처리합니다.
바인딩 모드 보완
바인딩된 열과 함께 바인딩되지 않은 열을 표시하여 바인딩 모드를 보완할 수 있습니다. 이를 "혼합 모드"라고도 하며 계산된 값 또는 UI(사용자 인터페이스) 컨트롤과 같은 항목을 표시하는 데 유용합니다.
바인딩되지 않은 열은 데이터 소스 외부에 있으므로 데이터 소스의 정렬 작업에서 무시됩니다. 따라서 혼합 모드에서 정렬을 활성화할 때, 로컬 캐시에서 비바인딩 데이터를 관리하고 가상 모드를 구현하여 DataGridView 컨트롤이 상호작용할 수 있도록 해야 합니다.
가상 모드를 사용하여 바인딩되지 않은 열의 값을 유지하는 방법에 대한 자세한 내용은 DataGridViewCheckBoxColumn.ThreeState 속성 및 System.Windows.Forms.DataGridViewComboBoxColumn 클래스 참조 토픽의 예제를 참조하세요.
바인딩 모드 변경하기
바인딩 모드가 성능 요구 사항을 충족하지 않는 경우 가상 모드 이벤트 처리기를 통해 사용자 지정 캐시의 모든 데이터를 관리할 수 있습니다. 예를 들어 가상 모드를 사용하여 최적의 성능을 위해 필요한 만큼의 네트워크 데이터베이스에서 데이터만 검색하는 Just-In-Time 데이터 로드 메커니즘을 구현할 수 있습니다. 이 시나리오는 느린 네트워크 연결을 통해 많은 양의 데이터를 사용하거나 RAM 또는 스토리지 공간이 제한된 클라이언트 컴퓨터에서 작업할 때 특히 유용합니다.
자세한 내용은 Just-In-Time 시나리오에서 가상 모드를 사용하는 방법에 대해 Windows Forms DataGridView 컨트롤에서 Just-In-Time 데이터 로드를 통해 가상 모드 구현을 참조하세요.
가상 모드 이벤트
데이터가 읽기 전용인 경우 CellValueNeeded 이벤트만 처리하면 될 수 있습니다. 추가 가상 모드 이벤트를 사용하면 사용자 편집, 행 추가 및 삭제, 행 수준 트랜잭션과 같은 특정 기능을 사용할 수 있습니다.
일부 표준 이벤트(예: 사용자가 행을 추가하거나 삭제할 때, 또는 셀 값이 편집, 구문 분석, 유효성 검사, 또는 서식 설정될 때 발생하는 이벤트)는 가상 모드에서도 유용합니다. 셀 도구 설명 텍스트, 셀 및 행 오류 텍스트, 셀 및 행 바로 가기 메뉴 데이터, 행 높이 데이터와 같이 일반적으로 바인딩된 데이터 소스에 저장되지 않은 값을 유지할 수 있는 이벤트를 처리할 수도 있습니다.
행 수준 커밋 범위로 읽기/쓰기 데이터를 관리하기 위한 가상 모드를 구현하는 방법에 대한 자세한 내용은 Windows Forms DataGridView 컨트롤에서 가상 모드 구현 연습을 참조하세요.
셀 수준 커밋 범위를 사용하여 가상 모드를 구현하는 예제에 대해서는 VirtualMode 속성 참조 항목을 확인하세요.
다음 이벤트는 VirtualMode 속성이 true로 설정된 경우에만 발생합니다.
| 이벤트 | 설명 |
|---|---|
| CellValueNeeded | 컨트롤에서 표시할 데이터 캐시에서 셀 값을 검색하는 데 사용됩니다. 바인딩되지 않은 열에 있는 셀에 대해서만 이 이벤트가 발생합니다. |
| CellValuePushed | 컨트롤에서 데이터 캐시에 셀에 대한 사용자 입력을 커밋하는 데 사용됩니다. 이 이벤트는 바인딩되지 않은 열의 셀에 대해서만 발생합니다. UpdateCellValue 메서드를 호출하여 CellValuePushed 이벤트 처리기 외부에서 캐시된 값을 변경할 때, 현재 값이 컨트롤에 제대로 표시되도록 하고 현재 적용 중인 자동 크기 조정 모드를 적용합니다. |
| NewRowNeeded | 컨트롤에서 데이터 캐시의 새 행에 대한 필요성을 나타내는 데 사용됩니다. |
| RowDirtyStateNeeded | 컨트롤에서 행에 커밋되지 않은 변경이 있는지 여부를 확인하는 데 사용됩니다. |
| CancelRowEdit | 컨트롤에서 행을 캐시된 값으로 되돌려야 함을 나타내는 데 사용됩니다. |
다음 이벤트는 가상 모드에서 유용하지만 VirtualMode 속성 설정과 무관하게 사용할 수 있습니다.
| 이벤트 | 설명 |
|---|---|
| UserDeletingRow UserDeletedRow RowsRemoved RowsAdded |
컨트롤에서 행이 삭제 또는 추가되는 시기를 나타내는 데 사용되므로 그에 따라 데이터 캐시를 업데이트할 수 있습니다. |
| CellFormatting CellParsing CellValidating CellValidated RowValidating RowValidated |
컨트롤에서 표시할 셀 값의 서식을 지정하고 사용자 입력을 구문 분석하고 유효성을 검사하는 데 사용됩니다. |
| CellToolTipTextNeeded |
DataSource 속성이 설정되거나 VirtualMode 속성이 true일 때, 컨트롤에서 셀 ToolTip 텍스트를 검색하는 데 사용됩니다.셀 도구 설명은 ShowCellToolTips 속성 값이 true인 경우에만 표시됩니다. |
| CellErrorTextNeeded RowErrorTextNeeded |
컨트롤은 DataSource 속성이 설정되거나 VirtualMode 속성이 true인 경우 셀 또는 행 오류 텍스트를 검색하는 데 사용됩니다.셀 또는 행의 오류 텍스트를 변경할 때 UpdateCellErrorText 메서드 또는 UpdateRowErrorText 메서드를 호출하여 현재 값이 컨트롤에 표시되도록 하십시오. 셀 및 행 오류 기호는 ShowCellErrors 및 ShowRowErrors 속성 값이 true일 때 표시됩니다. |
| CellContextMenuStripNeeded RowContextMenuStripNeeded |
컨트롤 DataSource 속성이 설정되거나 VirtualMode 속성이 true인 경우 컨트롤에서 셀 또는 행 ContextMenuStrip을 검색하는 데 사용됩니다. |
| RowHeightInfoNeeded RowHeightInfoPushed |
컨트롤에서 데이터 캐시에 행 높이 정보를 검색하거나 저장하는 데 사용됩니다. 캐시된 행 높이 정보를 RowHeightInfoPushed 이벤트 처리기 외부에서 변경할 때는 UpdateRowHeightInfo 메서드를 호출하여, 현재 값이 컨트롤 표시에서 사용되도록 합니다. |
가상 모드의 모범 사례
많은 양의 데이터를 효율적으로 사용하기 위해 가상 모드를 구현하는 경우, DataGridView 컨트롤 자체도 효율적으로 활용하고 있는지 확인해야 합니다. 셀 스타일, 자동 크기 조정, 선택 및 행 공유의 효율적인 사용에 대한 자세한 내용은 Windows Forms DataGridView 컨트롤의 크기 조정에 대한 모범 사례를 참조하세요.
참고하십시오
- DataGridView
- VirtualMode
- Windows Forms DataGridView 컨트롤의 성능 튜닝
- Windows Forms DataGridView 컨트롤의 크기 조정에 대한 모범 사례
- 가이드: Windows Forms DataGridView 컨트롤에서 가상 모드 구현
- Windows Forms DataGridView 컨트롤에서 JIT 데이터 로드를 사용하여 가상 모드를 구현하기
.NET Desktop feedback