DataGridView.VirtualMode プロパティ
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)

Dim instance As DataGridView Dim value As Boolean value = instance.VirtualMode instance.VirtualMode = value
/** @property */ public boolean get_VirtualMode () /** @property */ public void set_VirtualMode (boolean value)
DataGridView が指定されたデータ管理操作を使用する場合は true。それ以外の場合は false。既定値は false です。

仮想モードは、大規模なデータのストアで使用するようにデザインされています。VirtualMode プロパティが true の場合、設定された行数および列数の DataGridView を作成してから、CellValueNeeded イベントを使用してセルを設定します。仮想モードでは、基になるデータ キャッシュを実装して、ユーザーの操作に基づき DataGridView セルの読み込み、編集、および削除を処理する必要があります。仮想モードの実装の詳細については、「方法 : Windows フォーム DataGridView コントロールで仮想モードを実装する」を参照してください。
DataGridView コントロールがバインド モードの場合、非バインド列の値を保持するには、仮想モードを使用する必要があります。バインド モードでの非バインド列をキーとする並べ替えはサポートされていません。

仮想モードを使用して、正の整数の表を作成するコード例を次に示します。
Imports System.IO Imports System.Collections.Generic Imports System.Windows.Forms Public Class VirtualModeDemo Inherits System.Windows.Forms.Form Dim WithEvents dataGridView1 As New DataGridView Public Sub New() MyBase.New() Text = "DataGridView virtual-mode demo (cell-level commit scope)" Controls.Add(dataGridView1) dataGridView1.VirtualMode = True dataGridView1.AllowUserToDeleteRows = False dataGridView1.Columns.Add("Numbers", "Positive Numbers") dataGridView1.Rows.AddCopies(0, initialSize) End Sub Dim newRowNeeded As Boolean Private Sub dataGridView1_NewRowNeeded(ByVal sender As Object, _ ByVal e As DataGridViewRowEventArgs) _ Handles dataGridView1.NewRowNeeded newRowNeeded = True End Sub Const initialSize As Integer = 5000000 Dim numberOfRows As Integer = initialSize Private Sub dataGridView1_RowsAdded(ByVal sender As Object, _ ByVal e As DataGridViewRowsAddedEventArgs) _ Handles dataGridView1.RowsAdded If newRowNeeded Then newRowNeeded = False numberOfRows = numberOfRows + 1 End If End Sub #Region "data store maintance" Const initialValue As Integer = -1 Private Sub dataGridView1_CellValueNeeded(ByVal sender As Object, _ ByVal e As DataGridViewCellValueEventArgs) _ Handles dataGridView1.CellValueNeeded If store.ContainsKey(e.RowIndex) Then ' Use the store if the e value has been modified ' and stored. e.Value = store(e.RowIndex) ElseIf newRowNeeded AndAlso e.RowIndex = numberOfRows Then If dataGridView1.IsCurrentCellInEditMode Then e.Value = initialValue Else ' Show a blank value if the cursor is just resting ' on the last row. e.Value = String.Empty End If Else e.Value = e.RowIndex End If End Sub Private Sub dataGridView1_CellValuePushed(ByVal sender As Object, _ ByVal e As DataGridViewCellValueEventArgs) _ Handles dataGridView1.CellValuePushed store.Add(e.RowIndex, CInt(e.Value)) End Sub #End Region Dim store As System.Collections.Generic.Dictionary(Of Integer, Integer) = _ New Dictionary(Of Integer, Integer) Private Sub dataGridView1_CellValidating(ByVal sender As Object, _ ByVal e _ As DataGridViewCellValidatingEventArgs) _ Handles dataGridView1.CellValidating Me.dataGridView1.Rows(e.RowIndex).ErrorText = "" Dim newInteger As Integer ' Don't try to validate the 'new row' until finished ' editing since there ' is not any point in validating its initial value. If dataGridView1.Rows(e.RowIndex).IsNewRow Then Return If Not Integer.TryParse(e.FormattedValue.ToString(), newInteger) _ OrElse newInteger < 0 Then e.Cancel = True Me.dataGridView1.Rows(e.RowIndex).ErrorText = "the value must be a non-negative integer" End If End Sub <STAThreadAttribute()> _ Public Shared Sub Main() Application.Run(New VirtualModeDemo()) End Sub End Class
using System.IO; using System.Collections.Generic; using System.Windows.Forms; using System.Drawing; using System; public class VirtualModeDemo : Form { DataGridView dataGridView1 = new DataGridView(); public VirtualModeDemo() : base() { Text = "DataGridView virtual-mode demo (cell-level commit scope)"; dataGridView1.NewRowNeeded += new DataGridViewRowEventHandler(dataGridView1_NewRowNeeded); dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(dataGridView1_RowsAdded); dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating); dataGridView1.CellValueNeeded += new DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded); dataGridView1.CellValuePushed += new DataGridViewCellValueEventHandler(dataGridView1_CellValuePushed); Controls.Add(dataGridView1); dataGridView1.VirtualMode = true; dataGridView1.AllowUserToDeleteRows = false; dataGridView1.Columns.Add("Numbers", "Positive Numbers"); dataGridView1.Rows.AddCopies(0, initialSize); } bool newRowNeeded; private void dataGridView1_NewRowNeeded(object sender, DataGridViewRowEventArgs e) { newRowNeeded = true; } const int initialSize = 5000000; int numberOfRows = initialSize; private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { if (newRowNeeded) { newRowNeeded = false; numberOfRows = numberOfRows + 1; } } #region "data store maintance" const int initialValue = -1; private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { if (store.ContainsKey(e.RowIndex)) { // Use the store if the e value has been modified // and stored. e.Value = store[e.RowIndex]; } else if (newRowNeeded && e.RowIndex == numberOfRows) { if (dataGridView1.IsCurrentCellInEditMode) { e.Value = initialValue; } else { // Show a blank value if the cursor is just resting // on the last row. e.Value = String.Empty; } } else { e.Value = e.RowIndex; } } private void dataGridView1_CellValuePushed(object sender, DataGridViewCellValueEventArgs e) { store.Add(e.RowIndex, int.Parse(e.Value.ToString())); } #endregion private Dictionary<int, int> store = new Dictionary<int, int>(); private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { dataGridView1.Rows[e.RowIndex].ErrorText = ""; int newInteger; // Don't try to validate the 'new row' until finished // editing since there // is not any point in validating its initial value. if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; } if (!int.TryParse(e.FormattedValue.ToString() , out newInteger) || newInteger < 0) { e.Cancel = true; dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be a non-negative integer"; } } [STAThreadAttribute()] public static void Main() { Application.Run(new VirtualModeDemo()); } }
import System.IO.*; import System.Collections.Generic.*; import System.Windows.Forms.*; import System.Drawing.*; import System.*; public class Virtual extends Form { private DataGridView dataGridView1 = new DataGridView(); public Virtual() { set_Text(this.GetType().get_Name()); dataGridView1.add_NewRowNeeded(new DataGridViewRowEventHandler( dataGridView1_NewRowNeeded)); dataGridView1.add_RowsAdded(new DataGridViewRowsAddedEventHandler( dataGridView1_RowsAdded)); dataGridView1.add_CellValidating( new DataGridViewCellValidatingEventHandler( dataGridView1_CellValidating)); dataGridView1.add_CellValueNeeded( new DataGridViewCellValueEventHandler( dataGridView1_CellValueNeeded)); dataGridView1.add_CellValuePushed( new DataGridViewCellValueEventHandler( dataGridView1_CellValuePushed)); try { get_Controls().Add(dataGridView1); dataGridView1.set_VirtualMode(true); dataGridView1.set_AllowUserToDeleteRows(false); dataGridView1.get_Columns().Add("Numbers", "Positive Numbers"); dataGridView1.get_Rows().AddCopies(0, INITIALSIZE); } catch (System.Exception ex) { MessageBox.Show("Exception occured: " + ex.ToString()); } } //Virtual private boolean newRowNeeded; private void dataGridView1_NewRowNeeded(Object sender, DataGridViewRowEventArgs e) { newRowNeeded = true; } //dataGridView1_NewRowNeeded private final int INITIALSIZE = 5000000; private int numberOfRows = INITIALSIZE; private void dataGridView1_RowsAdded(Object sender, DataGridViewRowsAddedEventArgs e) { if (newRowNeeded) { newRowNeeded = false; numberOfRows = numberOfRows + 1; } } //dataGridView1_RowsAdded #region "data store maintance" private final int INITIALVALUE = -1; private void dataGridView1_CellValueNeeded(Object sender, DataGridViewCellValueEventArgs e) { if (store.ContainsKey(e.get_RowIndex())) { // Use the store if the e value has been modified // and stored. e.set_Value((Int32)store.get_Item(e.get_RowIndex())); } else { if (newRowNeeded && e.get_RowIndex() == numberOfRows) { if (dataGridView1.get_IsCurrentCellInEditMode()) { e.set_Value((Int32)INITIALVALUE); } else { // Show a blank e if the cursor is just loitering // over(the) // last row. e.set_Value(""); } } else { e.set_Value((Int32)e.get_RowIndex()); } } } //dataGridView1_CellValueNeeded private void dataGridView1_CellValuePushed(Object sender, DataGridViewCellValueEventArgs e) { store.Add(e.get_RowIndex(), Int32.Parse(e.get_Value().ToString())); } //dataGridView1_CellValuePushed #endregion private Dictionary<int, int> store = new Dictionary<int, int>(); private void dataGridView1_CellValidating(Object sender, DataGridViewCellValidatingEventArgs e) { int newInteger = 0; // Don't try to validate the 'new row' until finished // editing since there // is not any point in validating its initial value. if (dataGridView1.get_Rows().get_Item( e.get_RowIndex()).get_IsNewRow()) { return; } if (!(Int32.TryParse(e.get_FormattedValue().ToString(), newInteger)) || newInteger < 0) { e.set_Cancel(true); } } //dataGridView1_CellValidating public static void main(String[] args) { Application.Run(new Virtual()); } //main } //Virtual

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DataGridView クラス
DataGridView メンバ
System.Windows.Forms 名前空間
その他の技術情報
DataGridView コントロール (Windows フォーム)
Weblioに収録されているすべての辞書からDataGridView.VirtualMode プロパティを検索する場合は、下記のリンクをクリックしてください。

- DataGridView.VirtualMode プロパティのページへのリンク