DataGridView.RowsAdded Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит после добавления новой строки в объект 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
Тип события
Примеры
В следующем примере кода событие обрабатывается RowsAdded для увеличения количества строк в виртуальной DataGridViewсреде . Количество строк используется в обработчике CellValueNeeded , чтобы он знал, когда следует отображать пустую ячейку, а не инициализированную ячейку для новой строки. Этот пример является частью более крупного примера, доступного в справочном 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)
Комментарии
Строки в элементе управления не сортируются автоматически при добавлении новых строк. Чтобы отсортировать новые строки в правильное положение, вызовите Sort метод в обработчике RowsAdded событий.
Когда пользователь добавляет новую строку с помощью строки для новых записей, DataGridViewRowsAddedEventArgs.RowIndex значение в обработчике этого события равно индексу нового расположения строки для новых записей, который на один больше, чем только что добавленная строка. Однако RowIndex при программном добавлении строк значением является индекс первой добавленной строки.
В виртуальном режиме это событие происходит до CellValuePushed события и может использоваться для создания новых записей в хранилище данных, которые затем можно заполнить в обработчике CellValuePushed событий.
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.