DataGridView.RowsAdded Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Występuje po dodaniu nowego wiersza do elementu DataGridView.
public:
event System::Windows::Forms::DataGridViewRowsAddedEventHandler ^ RowsAdded;
public event System.Windows.Forms.DataGridViewRowsAddedEventHandler RowsAdded;
public event System.Windows.Forms.DataGridViewRowsAddedEventHandler? RowsAdded;
member this.RowsAdded : System.Windows.Forms.DataGridViewRowsAddedEventHandler
Public Custom Event RowsAdded As DataGridViewRowsAddedEventHandler
Typ zdarzenia
Przykłady
Poniższy przykład kodu obsługuje RowsAdded zdarzenie, aby zwiększać liczbę wierszy w wirtualnej maszynie wirtualnej DataGridView. Liczba wierszy jest używana w procedurze CellValueNeeded obsługi, aby wiedzieć, kiedy pokazać pustą komórkę w porównaniu z zainicjowaną komórką dla nowego wiersza. Ten przykład jest częścią większego przykładu dostępnego w temacie referencyjnym VirtualMode .
void VirtualConnector::dataGridView1_NewRowNeeded
(Object^ sender, DataGridViewRowEventArgs^ e)
{
newRowNeeded = true;
}
void VirtualConnector::dataGridView1_RowsAdded
(Object^ sender, DataGridViewRowsAddedEventArgs^ e)
{
if (newRowNeeded)
{
newRowNeeded = false;
numberOfRows = numberOfRows + 1;
}
}
#pragma region Data store maintance
void VirtualConnector::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 = gcnew Int32(store->default[e->RowIndex]);
}
else if (newRowNeeded && e->RowIndex == numberOfRows)
{
if (dataGridView1->IsCurrentCellInEditMode)
{
e->Value = initialValue;
}
else
{
// Show a blank e if the cursor is just loitering
// over(the) last row.
e->Value = String::Empty;
}
}
else
{
e->Value = e->RowIndex;
}
}
void VirtualConnector::dataGridView1_CellValuePushed
(Object^ sender, DataGridViewCellValueEventArgs^ e)
{
String^ value = e->Value->ToString();
store[e->RowIndex] = Int32::Parse(value,
CultureInfo::CurrentCulture);
}
#pragma endregion
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>();
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)
Uwagi
Wiersze w kontrolce nie są automatycznie sortowane po dodaniu nowych wierszy. Aby posortować nowe wiersze w ich prawidłowej pozycji, wywołaj metodę Sort w procedurze obsługi zdarzeń RowsAdded .
Gdy użytkownik dodaje nowy wiersz przy użyciu wiersza dla nowych rekordów, DataGridViewRowsAddedEventArgs.RowIndex wartość w procedurze obsługi dla tego zdarzenia jest równa indeksowi nowej lokalizacji wiersza dla nowych rekordów, co jest jedną większą niż właśnie dodany wiersz. Jednak podczas programowego RowIndex dodawania wierszy wartość jest indeksem dodanego pierwszego wiersza.
W trybie wirtualnym to zdarzenie występuje przed CellValuePushed zdarzeniem i może służyć do tworzenia nowych rekordów w magazynie danych, które można następnie wypełnić w procedurze CellValuePushed obsługi zdarzeń.
Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.