为什么RowsAdded不返回所有行?

时间:2017-08-16 18:05:39

标签: c# winforms c#-4.0 datagridview

Datagridview中有3行。我在runnig应用程序之后看到了。

但是当我使用RowsAdded事件时,它在控制台中仅显示0,1。它应该是0,1,2,为什么?

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
   Console.WriteLine(e.RowIndex);
}

我使用dataGridView1_RowsAdded来修改单元格数据。它适用于除最后一行之外的所有行:

enter image description here

您可以看到前两行已修改(日期)。最后一次不是

最小例子:

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    Console.WriteLine("ok");

    string birthday = dataGridView1.Rows[e.RowIndex]
        .Cells["dataGridViewTextBoxColumn42"].Value.ToString();
    DateTime dt = DateTime
        .ParseExact(birthday, "dd/mm/yyyy", CultureInfo.InvariantCulture);

    birthday = dt.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture);
    dataGridView1.Rows[e.RowIndex]
        .Cells["dataGridViewTextBoxColumn42"].Value = birthday;
}

2 个答案:

答案 0 :(得分:1)

行为记录在MSDN

  

将行添加到DataGridView控件时会发生RowsAdded事件。当用户使用该行为新记录添加新行时,此事件的处理程序中的RowIndex值等于新记录的行的新位置的索引,该值比刚刚添加的行大一。但是,以编程方式添加行时,RowIndex值是添加的第一行的索引。

RowIndex

  

获取第一个添加行的索引。

请注意,最后一行是插入新数据。这意味着在用户插入有效数据之前,此行不会添加到源。此时将弹出插入数据的新行。

答案 1 :(得分:0)

如果Datagridview属性AllowUserToAddRows设置为true,则最后一行用于插入,而提及@Fruchtzwerg