Windows Forms DataGridView 컨트롤의 가상 모드Virtual Mode in the Windows Forms DataGridView Control

가상 모드를 사용 하 여 DataGridView 컨트롤과 사용자 지정 데이터 캐시 간의 상호 작용을 관리할 수 있습니다.With virtual mode, you can manage the interaction between the DataGridView control and a custom data cache. 가상 모드를 구현 하려면 VirtualMode 속성을 true로 설정 하 고이 항목에서 설명 하는 하나 이상의 이벤트를 처리 합니다.To implement virtual mode, set the VirtualMode property to true and handle one or more of the events described in this topic. 일반적으로 하나 이상의 CellValueNeeded 이벤트를 처리 하 여 컨트롤에서 데이터 캐시의 값을 조회할 수 있도록 합니다.You will typically handle at least the CellValueNeeded event, which enables the control look up values in the data cache.

바인딩된 모드 및 가상 모드Bound Mode and Virtual Mode

가상 모드는 바인딩된 모드를 보완 하거나 대체 해야 하는 경우에만 필요 합니다.Virtual mode is necessary only when you need to supplement or replace bound mode. 바인딩된 모드에서는 DataSource 속성을 설정 하 고, 컨트롤은 지정 된 소스에서 데이터를 자동으로 로드 하 고 사용자 변경 내용을 다시 전송 합니다.In bound mode, you set the DataSource property and the control automatically loads the data from the specified source and submits user changes back to it. 표시 되는 바인딩된 열을 제어할 수 있으며, 데이터 소스 자체는 일반적으로 정렬과 같은 작업을 처리 합니다.You can control which of the bound columns are displayed, and the data source itself typically handles operations such as sorting.

바인딩 모드 보완Supplementing Bound Mode

바인딩된 열과 함께 바인딩되지 않은 열을 표시 하 여 바인딩된 모드를 보완할 수 있습니다.You can supplement bound mode by displaying unbound columns along with the bound columns. 이를 "혼합 모드" 라고도 하며 계산 된 값 또는 UI (사용자 인터페이스) 컨트롤과 같은 항목을 표시 하는 데 유용 합니다.This is sometimes called "mixed mode" and is useful for displaying things like calculated values or user-interface (UI) controls.

바인딩되지 않은 열은 데이터 소스 외부에 있으므로 데이터 원본의 정렬 작업에서 무시 됩니다.Because unbound columns are outside the data source, they are ignored by the data source's sorting operations. 따라서 혼합 모드에서 정렬을 사용 하도록 설정 하는 경우 로컬 캐시에서 바인딩되지 않은 데이터를 관리 하 고 DataGridView 컨트롤이 상호 작용할 수 있도록 가상 모드를 구현 해야 합니다.Therefore, when you enable sorting in mixed mode, you must manage the unbound data in a local cache and implement virtual mode to let the DataGridView control interact with it.

가상 모드를 사용 하 여 바인딩되지 않은 열의 값을 유지 하는 방법에 대 한 자세한 내용은 DataGridViewCheckBoxColumn.ThreeState 속성 및 System.Windows.Forms.DataGridViewComboBoxColumn 클래스 참조 항목의 예제를 참조 하세요.For more information about using virtual mode to maintain the values in unbound columns, see the examples in the DataGridViewCheckBoxColumn.ThreeState property and System.Windows.Forms.DataGridViewComboBoxColumn class reference topics.

바인딩된 모드 바꾸기Replacing Bound Mode

바인딩된 모드가 성능 요구를 충족 하지 않는 경우 가상 모드 이벤트 처리기를 통해 사용자 지정 캐시의 모든 데이터를 관리할 수 있습니다.If bound mode does not meet your performance needs, you can manage all your data in a custom cache through virtual-mode event handlers. 예를 들어 가상 모드를 사용 하 여 최적의 성능을 위해 필요한 만큼 네트워크로 연결 된 데이터베이스에서 데이터만 검색 하는 just-in-time 데이터 로드 메커니즘을 구현할 수 있습니다.For example, you can use virtual mode to implement a just-in-time data loading mechanism that retrieves only as much data from a networked database as is necessary for optimal performance. 이 시나리오는 느린 네트워크 연결을 통해 대량의 데이터를 사용 하거나 RAM 또는 저장소 공간이 제한 된 클라이언트 컴퓨터를 사용 하는 경우에 특히 유용 합니다.This scenario is particularly useful when working with large amounts of data over a slow network connection or with client machines that have a limited amount of RAM or storage space.

Just-in-time 시나리오에서 가상 모드를 사용 하는 방법에 대 한 자세한 내용은 Windows Forms DataGridView 컨트롤에서 Just-in-time 데이터 로드를 사용 하 여 가상 모드 구현을 참조 하세요.For more information about using virtual mode in a just-in-time scenario, see Implementing Virtual Mode with Just-In-Time Data Loading in the Windows Forms DataGridView Control.

가상 모드 이벤트Virtual-Mode Events

데이터가 읽기 전용 이면 처리 해야 하는 이벤트는 CellValueNeeded 이벤트 일 수 있습니다.If your data is read-only, the CellValueNeeded event may be the only event you will need to handle. 추가 가상 모드 이벤트를 사용 하 여 사용자 편집, 행 추가 및 삭제, 행 수준 트랜잭션과 같은 특정 기능을 사용할 수 있습니다.Additional virtual-mode events let you enable specific functionality like user edits, row addition and deletion, and row-level transactions.

사용자가 행을 추가 하거나 삭제할 때 발생 하는 이벤트, 사용자가 행을 추가 하거나 삭제할 때 발생 하는 이벤트, 셀 값 편집, 구문 분석, 유효성 검사 또는 형식이 지정 된 경우와 같은 일부 표준 DataGridView 이벤트는 가상 모드 에서도 유용 합니다Some standard DataGridView events (such as events that occur when users add or delete rows, or when cell values are edited, parsed, validated, or formatted) are useful in virtual mode, as well. 일반적으로 바인딩된 데이터 원본에 저장 되지 않는 값 (예: 셀 도구 설명 텍스트, 셀 및 행 오류 텍스트, 셀 및 행 바로 가기 메뉴 데이터 및 행 높이 데이터)을 유지 관리할 수 있는 이벤트를 처리할 수도 있습니다.You can also handle events that let you maintain values not typically stored in a bound data source, such as cell ToolTip text, cell and row error text, cell and row shortcut menu data, and row height data.

행 수준 커밋 범위를 사용 하 여 읽기/쓰기 데이터를 관리 하는 가상 모드를 구현 하는 방법에 대 한 자세한 내용은 연습: Windows Forms DataGridView 컨트롤에서 가상 모드 구현을 참조 하세요.For more information about implementing virtual mode to manage read/write data with a row-level commit scope, see Walkthrough: Implementing Virtual Mode in the Windows Forms DataGridView Control.

셀 수준 커밋 범위를 사용 하 여 가상 모드를 구현 하는 예제는 VirtualMode 속성 참조 항목을 참조 하세요.For an example that implements virtual mode with a cell-level commit scope, see the VirtualMode property reference topic.

다음 이벤트는 VirtualMode 속성이 true로 설정 된 경우에만 발생 합니다.The following events occur only when the VirtualMode property is set to true.

이벤트(event)Event DescriptionDescription
CellValueNeeded 컨트롤에서 표시할 데이터 캐시의 셀 값을 검색 하는 데 사용 됩니다.Used by the control to retrieve a cell value from the data cache for display. 이 이벤트는 바인딩되지 않은 열의 셀에 대해서만 발생 합니다.This event occurs only for cells in unbound columns.
CellValuePushed 컨트롤에서 데이터 캐시에 대 한 사용자 입력을 커밋하는 데 사용 됩니다.Used by the control to commit user input for a cell to the data cache. 이 이벤트는 바인딩되지 않은 열의 셀에 대해서만 발생 합니다.This event occurs only for cells in unbound columns.

CellValuePushed 이벤트 처리기 외부에서 캐시 된 값을 변경할 때 UpdateCellValue 메서드를 호출 하 여 현재 값이 컨트롤에 표시 되는지 확인 하 고 현재 적용 되는 자동 크기 조정 모드를 적용 합니다.Call the UpdateCellValue method when changing a cached value outside of a CellValuePushed event handler to ensure that the current value is displayed in the control and to apply any automatic sizing modes currently in effect.
NewRowNeeded 컨트롤에서 데이터 캐시에 새 행이 필요한 지 여부를 나타내는 데 사용 됩니다.Used by the control to indicate the need for a new row in the data cache.
RowDirtyStateNeeded 컨트롤에서 행에 커밋되지 않은 변경 내용이 있는지 여부를 확인 하는 데 사용 됩니다.Used by the control to determine whether a row has any uncommitted changes.
CancelRowEdit 컨트롤에서 행을 캐시 된 값으로 되돌려야 함을 나타내는 데 사용 됩니다.Used by the control to indicate that a row should revert to its cached values.

다음 이벤트는 가상 모드에서 유용 하지만 VirtualMode 속성 설정에 관계 없이 사용할 수 있습니다.The following events are useful in virtual mode, but can be used regardless of the VirtualMode property setting.

이벤트Events DescriptionDescription
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
컨트롤에서 행을 삭제 하거나 추가 하는 시간을 표시 하는 데 사용 되므로 데이터 캐시를 적절 하 게 업데이트할 수 있습니다.Used by the control to indicate when rows are deleted or added, letting you update the data cache accordingly.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
컨트롤에서 표시 하기 위해 셀 값의 서식을 지정 하 고 사용자 입력을 구문 분석 하 고 유효성을 검사 하는 데 사용 됩니다.Used by the control to format cell values for display and to parse and validate user input.
CellToolTipTextNeeded DataSource 속성이 설정 되거나 VirtualMode 속성이 true될 때 컨트롤에서 셀 도구 설명 텍스트를 검색 하는 데 사용 됩니다.Used by the control to retrieve cell ToolTip text when the DataSource property is set or the VirtualMode property is true.

ShowCellToolTips 속성 값이 true되는 경우에만 셀 도구 설명이 표시 됩니다.Cell ToolTips are displayed only when the ShowCellToolTips property value is true.
CellErrorTextNeeded

RowErrorTextNeeded
DataSource 속성이 설정 되거나 VirtualMode 속성이 true될 때 컨트롤에서 셀 또는 행 오류 텍스트를 검색 하는 데 사용 됩니다.Used by the control to retrieve cell or row error text when the DataSource property is set or the VirtualMode property is true.

셀 또는 행 오류 텍스트를 변경 하 여 현재 값이 컨트롤에 표시 되도록 하려면 UpdateCellErrorText 메서드나 UpdateRowErrorText 메서드를 호출 합니다.Call the UpdateCellErrorText method or the UpdateRowErrorText method when you change the cell or row error text to ensure that the current value is displayed in the control.

셀 및 행 오류 문자 모양은 ShowCellErrorsShowRowErrors 속성 값이 true될 때 표시 됩니다.Cell and row error glyphs are displayed when the ShowCellErrors and ShowRowErrors property values are true.
CellContextMenuStripNeeded

RowContextMenuStripNeeded
컨트롤 DataSource 속성이 설정 되거나 VirtualMode 속성이 true때 컨트롤이 셀 또는 행 ContextMenuStrip를 검색 하는 데 사용 됩니다.Used by the control to retrieve a cell or row ContextMenuStrip when the control DataSource property is set or the VirtualMode property is true.
RowHeightInfoNeeded

RowHeightInfoPushed
컨트롤에서 데이터 캐시의 행 높이 정보를 검색 하거나 저장 하는 데 사용 됩니다.Used by the control to retrieve or store row height information in the data cache. RowHeightInfoPushed 이벤트 처리기 외부에서 캐시 된 행 높이 정보를 변경할 때 UpdateRowHeightInfo 메서드를 호출 하 여 현재 값이 컨트롤 표시에 사용 되는지 확인 합니다.Call the UpdateRowHeightInfo method when changing the cached row height information outside of a RowHeightInfoPushed event handler to ensure that the current value is used in the display of the control.

가상 모드의 모범 사례Best Practices in Virtual Mode

많은 양의 데이터를 효율적으로 사용 하기 위해 가상 모드를 구현 하는 경우 DataGridView 컨트롤 자체를 효율적으로 사용 하 고 있는지도 확인 해야 합니다.If you are implementing virtual mode in order to work efficiently with large amounts of data, you will also want to ensure that you are working efficiently with the DataGridView control itself. 셀 스타일, 자동 크기 조정, 선택 항목 및 행 공유를 효율적으로 사용 하는 방법에 대 한 자세한 내용은 Windows Forms DataGridView 컨트롤 크기 조정에 대 한 모범 사례를 참조 하세요.For more information about the efficient use of cell styles, automatic sizing, selections, and row sharing, see Best Practices for Scaling the Windows Forms DataGridView Control.

참고 항목See also