仮想モードでは、 DataGridView コントロールとカスタム データ キャッシュの間の相互作用を管理できます。 仮想モードを実装するには、 VirtualMode プロパティを true
に設定し、このトピックで説明する 1 つ以上のイベントを処理します。 通常は、少なくとも CellValueNeeded
イベントを処理します。これにより、コントロールはデータ キャッシュ内の値を検索できます。
バインド モードと仮想モード
仮想モードは、バインド モードを補足または置換する必要がある場合にのみ必要です。 バインド モードでは、 DataSource プロパティを設定すると、コントロールは指定されたソースからデータを自動的に読み込み、ユーザーの変更を元に戻します。 表示するバインドされた列を制御でき、通常はデータ ソース自体が並べ替えなどの操作を処理します。
バウンドモードを補足する
バインドされていない列とバインドされた列を表示することで、バインド モードを補完できます。 これは"混合モード" とも呼ばれ、計算値やユーザー インターフェイス (UI) コントロールなどを表示する場合に便利です。
バインドされていない列はデータ ソースの外部にあるため、データ ソースの並べ替え操作では無視されます。 そのため、混合モードで並べ替えを有効にする場合は、ローカル キャッシュでバインドされていないデータを管理し、仮想モードを実装して、 DataGridView コントロールが操作できるようにする必要があります。
仮想モードを使用して非連結列の値を維持する方法の詳細については、 DataGridViewCheckBoxColumn.ThreeState プロパティと System.Windows.Forms.DataGridViewComboBoxColumn クラスのリファレンス トピックの例を参照してください。
バインド モードの置き換え
バインド モードがパフォーマンスニーズを満たしていない場合は、仮想モードのイベント ハンドラーを使用して、カスタム キャッシュ内のすべてのデータを管理できます。 たとえば、仮想モードを使用して、最適なパフォーマンスを得るために必要な量のデータのみをネットワーク データベースから取得する Just-In-Time データ読み込みメカニズムを実装できます。 このシナリオは、低速のネットワーク接続を介して大量のデータを操作する場合や、RAM または記憶域の容量が限られているクライアント マシンで作業する場合に特に便利です。
Just-In-Time シナリオでの仮想モードの使用の詳細については、「 Windows フォーム DataGridView コントロールでの Just-In-Time Data Loading を使用した仮想モードの実装」を参照してください。
Virtual-Mode イベント
データが読み取り専用の場合は、 CellValueNeeded
イベントのみが処理する必要があるイベントである可能性があります。 追加の仮想モード イベントを使用すると、ユーザーの編集、行の追加と削除、行レベルのトランザクションなどの特定の機能を有効にすることができます。
一部の標準 DataGridView イベント (ユーザーが行を追加または削除したとき、セル値が編集、解析、検証、または書式設定されたときに発生するイベントなど) は、仮想モードでも役立ちます。 また、セルのツールヒント テキスト、セルと行のエラー テキスト、セルと行のショートカット メニュー データ、行の高さデータなど、バインドされたデータ ソースに通常格納されない値を保持できるイベントを処理することもできます。
行レベルのコミット スコープを使用して読み取り/書き込みデータを管理するための仮想モードの実装の詳細については、「 チュートリアル: Windows フォーム DataGridView コントロールでの仮想モードの実装」を参照してください。
セル レベルのコミット スコープを持つ仮想モードを実装する例については、 VirtualMode プロパティのリファレンス トピックを参照してください。
次のイベントは、 VirtualMode プロパティが true
に設定されている場合にのみ発生します。
出来事 | 説明 |
---|---|
CellValueNeeded | 表示用のデータ キャッシュからセル値を取得するためにコントロールによって使用されます。 このイベントは、バインドされていない列のセルに対してのみ発生します。 |
CellValuePushed | セルのユーザー入力をデータ キャッシュにコミットするためにコントロールによって使用されます。 このイベントは、バインドされていない列のセルに対してのみ発生します。 UpdateCellValue イベント ハンドラーの外部でキャッシュされた値を変更するときに、CellValuePushed メソッドを呼び出して、現在の値がコントロールに表示されていることを確認し、現在有効になっている自動サイズ変更モードを適用します。 |
NewRowNeeded | データ キャッシュ内の新しい行の必要性を示すためにコントロールによって使用されます。 |
RowDirtyStateNeeded | 行にコミットされていない変更があるかどうかを判断するために、コントロールによって使用されます。 |
CancelRowEdit | 行をキャッシュされた値に戻す必要があることを示すために、コントロールによって使用されます。 |
次のイベントは仮想モードで役立ちますが、 VirtualMode プロパティの設定に関係なく使用できます。
イベント | 説明 |
---|---|
UserDeletingRow UserDeletedRow RowsRemoved RowsAdded |
行が削除または追加されるタイミングを示すためにコントロールによって使用され、それに応じてデータ キャッシュを更新できます。 |
CellFormatting CellParsing CellValidating CellValidated RowValidating RowValidated |
表示用のセル値を書式設定したり、ユーザー入力を解析および検証したりするために、コントロールによって使用されます。 |
CellToolTipTextNeeded |
DataSource プロパティが設定されているか、VirtualMode プロパティがtrue されている場合に、セルのツールヒント テキストを取得するためにコントロールによって使用されます。セル のツールヒントは、 ShowCellToolTips プロパティ値が true されている場合にのみ表示されます。 |
CellErrorTextNeeded RowErrorTextNeeded |
DataSource プロパティが設定されているか、VirtualMode プロパティがtrue されている場合に、コントロールによってセルまたは行のエラー テキストを取得するために使用されます。セルまたは行のエラー テキストを変更して現在の値がコントロールに表示されるようにする場合は、 UpdateCellErrorText メソッドまたは UpdateRowErrorText メソッドを呼び出します。 セルと行のエラー グリフは、 ShowCellErrors と ShowRowErrors のプロパティ値が true されると表示されます。 |
CellContextMenuStripNeeded RowContextMenuStripNeeded |
コントロール ContextMenuStrip プロパティが設定されているか、DataSource プロパティがVirtualModeされている場合に、コントロールがセルまたは行のtrue を取得するために使用されます。 |
RowHeightInfoNeeded RowHeightInfoPushed |
データ キャッシュ内の行の高さ情報を取得または格納するためにコントロールによって使用されます。 UpdateRowHeightInfo イベント ハンドラーの外部でキャッシュされた行の高さ情報を変更するときに、RowHeightInfoPushed メソッドを呼び出して、コントロールの表示で現在の値が使用されるようにします。 |
仮想モードのベスト プラクティス
大量のデータを効率的に操作するために仮想モードを実装する場合は、 DataGridView コントロール自体を効率的に操作する必要もあります。 セル スタイル、自動サイズ設定、選択、および行共有の効率的な使用の詳細については、「 Windows フォーム DataGridView コントロールのスケーリングのベスト プラクティス」を参照してください。
こちらも参照ください
.NET Desktop feedback