DataGridView.VirtualMode Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Denetim için DataGridView kendi veri yönetimi işlemlerinizi sağladığınızı belirten bir değer alır veya ayarlar.
public:
property bool VirtualMode { bool get(); void set(bool value); };
public bool VirtualMode { get; set; }
member this.VirtualMode : bool with get, set
Public Property VirtualMode As Boolean
Özellik Değeri
true
DataGridView sağladığınız veri yönetimi işlemlerini kullanıyorsa; değilse, false
. Varsayılan değer: false
.
Örnekler
Aşağıdaki kod örneği kodu, pozitif tamsayılardan oluşan bir tablo oluşturmak için sanal modu kullanır.
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());
}
}
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
Açıklamalar
Sanal mod, çok büyük veri depolarıyla kullanılmak üzere tasarlanmıştır.
VirtualMode özelliği olduğundatrue
, belirli sayıda satır ve sütun içeren bir oluşturur DataGridView ve sonra hücreleri doldurmak için olayı işlersinizCellValueNeeded. Sanal mod, kullanıcının eylemlerine göre hücrelerin popülasyonunu, düzenlemesini ve silinmesini DataGridView işlemek için temel alınan veri önbelleğinin uygulanmasını gerektirir. Sanal modu uygulama hakkında daha fazla bilgi için bkz. How to: Implement Virtual Mode in the Windows Forms DataGridView Control.
Denetim bağlı moddayken DataGridView ilişkisiz sütunların değerlerini korumak için sanal modu kullanmanız gerekir. İlişkili modda ilişkisiz sütunlara göre sıralama desteklenmez.