Windows Form DataGridView 控制項中的虛擬模式
更新:2007 年 11 月
使用虛擬模式,您可以管理 DataGridView 控制項和自訂資料快取之間的互動。若要實作虛擬模式,請將 VirtualMode 屬性設定為 true,並處理此主題中所描述的一或多個事件。您通常至少會處理 CellValueNeeded 事件,此事件能讓控制項查詢資料快取中的值。
繫結模式和虛擬模式
只有在需要補充或取代繫結模式時,才必須使用虛擬模式。在繫結模式中,您設定 DataSource 屬性,控制項會從指定的來源自動載入資料,並傳送回使用者變更。您可以控制顯示哪個繫結資料行,而資料來源本身通常會處理作業 (例如排序)。
補充繫結模式
您可以顯示未繫結資料行以及繫結資料行,以補充繫結模式。有時候這也稱為「混合模式」,在顯示像是計算值或使用者介面 (UI) 控制項之類的內容時,會非常的有用。
因為未繫結資料行是在資料來源以外,所以資料來源的排序作業通常會忽略未繫結資料行。所以,當您啟用混合模式中的排序時,就必須管理本機快取中的未繫結資料並實作虛擬模式,讓 DataGridView 控制項與其互動。
如需使用虛擬模式以維護未繫結資料行的值的詳細資訊,請參閱 DataGridViewCheckBoxColumn.ThreeState 屬性和 System.Windows.Forms.DataGridViewComboBoxColumn 類別參考主題中的範例。
取代繫結模式
如果繫結模式不符合效能需求,您可以透過虛擬模式事件處理常式,在自訂快取中管理所有資料。例如,您可以使用虛擬模式來實作 Just-In-Time 資料載入機制,此機制會從網路連接的資料庫中,只擷取最佳化效能所需的資料量。當在緩慢的網路連接上使用大量資料,或使用 RAM 或儲存空間有限的用戶端機器時,這個案例會特別有用。
如需使用 Just-In-Time 案例中虛擬模式的詳細資訊,請參閱在 Windows Form DataGridView 控制項中以 Just-In-Time 資料載入方式實作虛擬模式。
虛擬模式事件
如果資料為唯讀,則 CellValueNeeded 事件可能會是您需要處理的唯一事件。其他的虛擬模式事件會讓您啟用特定的功能 (例如使用者編輯、新增和刪除資料列以及資料列層級交易)。
某些標準 DataGridView 事件 (例如,使用者在新增或刪除資料列或當編輯、剖析、驗證或格式化儲存格值時,所發生的事件) 在虛擬模式中也很有用。您能處理的事件還包括維護通常不儲存於繫結資料來源的值,例如,儲存格工具提示文字、儲存格和資料列錯誤文字、儲存格和資料列快速鍵功能表資料,以及列高資料。
如需實作虛擬模式以管理資料列層級認可範圍的讀取/寫入資料,請參閱逐步解說:在 Windows Form DataGridView 控制項中實作虛擬模式。
如需實作儲存格層級認可範圍的虛擬模式,請參閱 VirtualMode 屬性參考主題。
只有在將 VirtualMode 屬性設定為 true 時,才會發生下列事件。
事件 |
描述 |
---|---|
由控制項用來從資料快取擷取要顯示的儲存格值。此事件只發生於未繫結資料行中的儲存格。 |
|
由控制項用來將儲存格的使用者輸入提交至資料快取。此事件只發生於未繫結資料行中的儲存格。 當變更 CellValuePushed 事件處理常式以外的快取值時,呼叫 UpdateCellValue 方法,以確保目前的值顯示在控制項中,並套用目前生效的任何自動調整大小模式。 |
|
由控制項用來表示資料快取中新資料列的需求。 |
|
由控制項用來決定控制項是否有任何未認可的變更。 |
|
由控制項用來表示資料列應該還原成快取值。 |
下列事件在虛擬模式中會很有用,但不論 VirtualMode 屬性設定為何都可以使用。
事件 |
描述 |
---|---|
由控制項用來表示刪除或加入資料列的時機,讓您可以相對地更新資料快取。 |
|
由控制項用來格式化要顯示的儲存格值,並且剖析及驗證使用者輸入。 |
|
由控制項用來在已經設定 DataSource 屬性或 VirtualMode 屬性為 true 時,擷取儲存格工具提示文字。 儲存格工具提示只會在 ShowCellToolTips 屬性值為 true 時才會顯示。 |
|
由控制項用來在已經設定 DataSource 屬性或 VirtualMode 屬性為 true 時,擷取儲存格或資料列錯誤文字。 當您變更儲存格或資料列錯誤文字時,請呼叫 UpdateCellErrorText 方法或 UpdateRowErrorText 方法,以確保目前的值是顯示在控制項中。 當 ShowCellErrors 和 ShowRowErrors 屬性值為 true 時,會顯示儲存格和資料列錯誤圖像 (Glyph)。 |
|
當控制項已經設定 DataSource 屬性或 VirtualMode 屬性為 true 時,由控制項用來擷取儲存格或資料列 ContextMenuStrip。 |
|
由控制項用來擷取或儲存資料快取中的列高資訊。在變更 RowHeightInfoPushed 事件處理常式以外的快取列高資訊時,請呼叫 UpdateRowHeightInfo 方法,以確保目前的值是使用於控制項的顯示中。 |
虛擬模式中的最佳作法
如果是為了要有效使用大量資料而實作虛擬模式,您也會想確保有效使用該 DataGridView 控制項本身。如需有效使用儲存格樣式、自動調整大小、選取和資料列共用的詳細資訊,請參閱縮放 Windows Form DataGridView 控制項的最佳作法。
請參閱
工作
逐步解說:在 Windows Form DataGridView 控制項中實作虛擬模式
概念
縮放 Windows Form DataGridView 控制項的最佳作法
在 Windows Form DataGridView 控制項中以 Just-In-Time 資料載入方式實作虛擬模式