Windows Forms DataGridView 컨트롤의 가상 모드

가상 모드를 사용하면 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 이벤트는 처리해야 하는 유일한 이벤트일 수 있습니다. 추가 가상 모드 이벤트를 사용하면 사용자 편집, 행 추가 및 삭제, 행 수준 트랜잭션과 같은 특정 기능을 사용할 수 있습니다.

일부 표준 DataGridView 이벤트(예: 사용자가 행을 추가 또는 삭제하거나 셀 값이 편집, 구문 분석, 유효성 검사 또는 형식화될 때 발생하는 이벤트)도 가상 모드에서 유용합니다. 셀 도구 설명 텍스트, 셀 및 행 오류 텍스트, 셀 및 행 바로 가기 메뉴 데이터, 행 높이 데이터와 같이 일반적으로 바인딩된 데이터 소스에 저장되지 않은 값을 유지할 수 있는 이벤트를 처리할 수도 있습니다.

행 수준 커밋 범위를 사용하여 읽기/쓰기 데이터를 관리하는 가상 모드를 구현하는 방법에 대한 자세한 내용은 연습: Windows Forms DataGridView 컨트롤에서 가상 모드 구현을 참조하세요.

셀 수준 커밋 범위를 사용하여 가상 모드를 구현하는 예제는 VirtualMode 속성 참조 항목을 참조하세요.

다음 이벤트는 VirtualMode 속성이 true로 설정된 경우에만 발생합니다.

이벤트 설명
CellValueNeeded 컨트롤에서 표시할 데이터 캐시에서 셀 값을 검색하는 데 사용됩니다. 이 이벤트는 바인딩되지 않은 열의 셀에 대해서만 발생합니다.
CellValuePushed 컨트롤에서 데이터 캐시에 셀에 대한 사용자 입력을 커밋하는 데 사용됩니다. 이 이벤트는 바인딩되지 않은 열의 셀에 대해서만 발생합니다.

CellValuePushed 이벤트 처리기 외부에서 캐시된 값을 변경할 때 UpdateCellValue 메서드를 호출하여 현재 값이 컨트롤에 표시되도록 하고 현재 적용 중인 자동 크기 조정 모드를 적용합니다.
NewRowNeeded 컨트롤에서 데이터 캐시의 새 행에 대한 필요성을 나타내는 데 사용됩니다.
RowDirtyStateNeeded 컨트롤에서 행에 커밋되지 않은 변경이 있는지 여부를 확인하는 데 사용됩니다.
CancelRowEdit 컨트롤에서 행을 캐시된 값으로 되돌려야 함을 나타내는 데 사용됩니다.

다음 이벤트는 가상 모드에서 유용하지만 VirtualMode 속성 설정과 무관하게 사용할 수 있습니다.

이벤트 Description
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
컨트롤에서 행이 삭제 또는 추가되는 시기를 나타내는 데 사용되므로 그에 따라 데이터 캐시를 업데이트할 수 있습니다.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
컨트롤에서 표시할 셀 값의 서식을 지정하고 사용자 입력을 구문 분석하고 유효성을 검사하는 데 사용됩니다.
CellToolTipTextNeeded DataSource 속성이 설정되거나 VirtualMode 속성이 true인 경우 컨트롤에서 셀 도구 설명 텍스트를 검색하는 데 사용됩니다.

셀 도구 설명은 ShowCellToolTips 속성 값이 true인 경우에만 표시됩니다.
CellErrorTextNeeded

RowErrorTextNeeded
DataSource 속성이 설정되거나 VirtualMode 속성이 true인 경우 컨트롤에서 셀 또는 행 오류 텍스트를 검색하는 데 사용됩니다.

셀 또는 행 오류 텍스트를 변경할 때 UpdateCellErrorText 메서드 또는 UpdateRowErrorText 메서드를 호출하여 현재 값이 컨트롤에 표시되는지 확인합니다.

셀 및 행 오류 문자 모양은 ShowCellErrorsShowRowErrors 속성 값이 true일 때 표시됩니다.
CellContextMenuStripNeeded

RowContextMenuStripNeeded
컨트롤 DataSource 속성이 설정되거나 VirtualMode 속성이 true인 경우 컨트롤에서 셀 또는 행 ContextMenuStrip을 검색하는 데 사용됩니다.
RowHeightInfoNeeded

RowHeightInfoPushed
컨트롤에서 데이터 캐시에 행 높이 정보를 검색하거나 저장하는 데 사용됩니다. RowHeightInfoPushed 이벤트 처리기 외부에서 캐시된 행 높이 정보를 변경할 때 UpdateRowHeightInfo 메서드를 호출하여 현재 값이 컨트롤의 표시에 사용되는지 확인합니다.

가상 모드의 모범 사례

많은 양의 데이터를 효율적으로 사용하기 위해 가상 모드를 구현하는 경우 DataGridView 컨트롤 자체를 효율적으로 사용하고 있는지도 확인해야 합니다. 셀 스타일, 자동 크기 조정, 선택 영역 및 행 공유의 효율적인 사용에 대한 자세한 내용은 Windows Forms DataGridView 컨트롤의 크기 조정에 대한 모범 사례를 참조하세요.

참고 항목