【问题标题】:Why does RowsAdded return not all rows?为什么 RowsAdded 不返回所有行?
【发布时间】:2017-08-16 18:05:39
【问题描述】:

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

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

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

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

您可以看到前两行已修改(日期)。最后一个没有

小例子:

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;
}

【问题讨论】:

    标签: c# winforms c#-4.0 datagridview


    【解决方案1】:

    该行为记录在MSDN

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

    RowIndex:

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

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

    【讨论】:

    • 我没有通过链接找到任何东西
    • 看请再提问,我添加了新数据
    • 抱歉,如果没有最小的工作示例,我们将无法帮助您。绝对不清楚您是如何通过在控制台中打印内容来修改格式的。
    • 好,我现在分享
    【解决方案2】:

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

    【讨论】:

    • 是假的,真的
    • 是的,你可以试试。
    • 这不是原因。属性AllowUserToAddRows 已为假
    • 查看我的问题
    • 我试过了,和你说的一样,但是你想做什么,你可以在数据绑定后使用dataGridView1_BindingContextChanged代替
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多