Windows Form DataGridView 控制項中的虛擬模式

透過虛擬模式,您可以管理控制項與自訂資料快取之間的 DataGridView 互動。 若要實作虛擬模式,請將 VirtualMode 屬性設定為 true ,並處理本主題中所述的一或多個事件。 您通常至少 CellValueNeeded 會處理 事件,這可讓控制項查閱資料快取中的值。

系結模式和虛擬模式

只有在您需要補充或取代系結模式時,才需要虛擬模式。 在系結模式中 DataSource ,您可以設定 屬性和控制項,自動從指定的來源載入資料,並將使用者變更送回該屬性。 您可以控制要顯示哪些系結資料行,而且資料來源本身通常會處理排序之類的作業。

補充系結模式

您可以藉由顯示未系結的資料行以及系結資料行來補充系結模式。 這有時稱為「混合模式」,並可用於顯示計算值或使用者介面 (UI) 控制項等專案。

由於未系結的資料行位於資料來源之外,因此資料來源的排序作業會忽略這些資料行。 因此,當您在混合模式中啟用排序時,您必須管理本機快取中的未系結資料,並實作虛擬模式,讓 DataGridView 控制項與其互動。

如需使用虛擬模式維護未系結資料行中值的詳細資訊,請參閱 屬性和 System.Windows.Forms.DataGridViewComboBoxColumn 類別參考主題中的 DataGridViewCheckBoxColumn.ThreeState 範例。

取代系結模式

如果系結模式不符合您的效能需求,您可以透過虛擬模式事件處理常式來管理自訂快取中的所有資料。 例如,您可以使用虛擬模式來實作 Just-In-Time 資料載入機制,只擷取來自網路資料庫的資料,以獲得最佳效能。 當透過網路連線緩慢或具有有限 RAM 或儲存空間的用戶端電腦使用大量資料時,此案例特別有用。

如需在 Just-In-Time 案例中使用虛擬模式的詳細資訊,請參閱 在 Windows Forms DataGridView 控制項 中使用 Just-In-Time 資料載入實作虛擬模式。

虛擬模式事件

如果您的資料是唯讀的, CellValueNeeded 事件可能是您需要處理的唯一事件。 其他虛擬模式事件可讓您啟用特定功能,例如使用者編輯、資料列新增和刪除,以及資料列層級交易。

某些標準 DataGridView 事件(例如使用者新增或刪除資料列時所發生的事件,或是編輯、剖析、驗證或格式化儲存格值時)也適用于虛擬模式。 您也可以處理事件,讓您維護通常不儲存在系結資料來源中的值,例如資料格工具提示文字、儲存格和資料列錯誤文字、儲存格和資料列快捷方式功能表資料,以及資料列高度資料。

如需實作虛擬模式以管理具有資料列層級認可範圍之讀取/寫入資料的詳細資訊,請參閱 逐步解說:在 Windows Forms DataGridView 控制項 中實作虛擬模式。

如需使用資料格層級認可範圍實作虛擬模式的範例,請參閱 VirtualMode 屬性參考主題。

只有當 屬性設定為 true 時, VirtualMode 才會發生下列事件。

事件 描述
CellValueNeeded 控制項用來從資料快取擷取儲存格值以供顯示。 這個事件只會針對未系結資料行中的儲存格發生。
CellValuePushed 控制項用來將資料格的使用者輸入認可至資料快取。 這個事件只會針對未系結資料行中的儲存格發生。

UpdateCellValue變更事件處理常式外部 CellValuePushed 的快取值時呼叫 方法,以確保目前的值會顯示在 控制項中,並套用目前生效的任何自動調整大小模式。
NewRowNeeded 控制項用來指出資料快取中新資料列的需求。
RowDirtyStateNeeded 控制項用來判斷資料列是否有任何未認可的變更。
CancelRowEdit 控制項用來指出資料列應該還原為其快取的值。

下列事件在虛擬模式中很有用,但不論屬性設定為何 VirtualMode ,都可以使用。

事件 描述
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
控制項用來指出何時刪除或新增資料列,讓您據以更新資料快取。
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
控制項用來格式化用於顯示的資料格值,以及剖析和驗證使用者輸入。
CellToolTipTextNeeded 當 屬性設定或 VirtualMode 屬性 true 為 時 DataSource ,控制項用來擷取儲存格工具提示文字。

儲存格工具提示只有在屬性值為 trueShowCellToolTips 才會顯示。
CellErrorTextNeeded

RowErrorTextNeeded
當 屬性設定或 屬性為 true 時, DataSource 控制項用來擷取儲存格或 VirtualMode 資料列錯誤文字。

UpdateCellErrorText當您變更儲存格或資料列錯誤文字時,呼叫 方法或 UpdateRowErrorText 方法,以確保控制項中會顯示目前的值。

當 和 屬性值為 trueShowCellErrors ,會顯示儲存格和資料 ShowRowErrors 列錯誤圖像。
CellContextMenuStripNeeded

RowContextMenuStripNeeded
當控制項屬性設定或 屬性 true 為 時 DataSource ,控制項用來擷取儲存格或 VirtualMode 資料列 ContextMenuStrip
RowHeightInfoNeeded

RowHeightInfoPushed
控制項用來擷取或儲存資料快取中的資料列高度資訊。 UpdateRowHeightInfo在事件處理常式之外 RowHeightInfoPushed 變更快取的資料列高度資訊時,呼叫 方法,以確保控制項的顯示中使用目前的值。

虛擬模式中的最佳做法

如果您要實作虛擬模式,以便有效率地處理大量資料,您也會想要確保您能有效率地使用 DataGridView 控制項本身。 如需有效使用儲存格樣式、自動調整大小、選取範圍和資料列共用的詳細資訊,請參閱 調整 Windows Forms DataGridView 控制項 的最佳做法。

另請參閱