DataGridView.NewRowNeeded 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当 VirtualMode 的 DataGridView 属性为 true
时,将在用户定位到 DataGridView 底部的新行时发生。
public:
event System::Windows::Forms::DataGridViewRowEventHandler ^ NewRowNeeded;
public event System.Windows.Forms.DataGridViewRowEventHandler NewRowNeeded;
public event System.Windows.Forms.DataGridViewRowEventHandler? NewRowNeeded;
member this.NewRowNeeded : System.Windows.Forms.DataGridViewRowEventHandler
Public Custom Event NewRowNeeded As DataGridViewRowEventHandler
事件类型
示例
下面的代码示例使用 NewRowNeeded 事件跟踪何时添加新行,因此事件处理程序中的 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)
注解
DataGridView当 处于虚拟模式时,此事件允许在数据存储中为新行创建新条目,并且还允许使用默认值填充该行。
有关如何处理事件的详细信息,请参阅 处理和引发事件。