Windows フォーム 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 に設定し、このトピックで説明する1つ以上のイベントを処理します。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. たとえば、仮想モードを使用すると、最適化されたパフォーマンスを得るために必要なだけのデータをネットワークデータベースから取得する、ジャストインタイムのデータ読み込みメカニズムを実装できます。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.

ジャストインタイムシナリオでの仮想モードの使用の詳細については、「 Windows フォーム 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 フォーム 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.

EventEvent 説明Description
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.

EventsEvents 説明Description
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 フォーム 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