DataGridView 行添加事件

12

我正在使用一个DataGridView,并将一个List绑定到DataSource上。

我已经有了正确的列,并且精确地映射了字段。我想要做的是处理类似于aspx GridView中的RowAddedRowDataBound事件。

我找到的唯一事件是RowsAdded,但无论我有多少项,它都只在第一次绑定时触发4次,而其他时间只触发两次,其值为:

e.RowCount:1 e.RowIndex:0 e.RowCount:[n-1] e.RowIndex:1 *这里的n是我的项数

有没有办法让我为每个项目获取一个处理句柄?

编辑:不改变DataSource = 绑定方法


您需要每次添加一行时都回调,还是仅需要所有行的集合即可?如果是后者,那么在调用“RowsAdded”时,“Rows”属性是否具有所有行的有效集合? - warrenm
抱歉,也许我没有解释清楚。 我需要每次添加一行时都进行回调。 - p4bl0
只是出于好奇...你到底想要实现什么? - Jeremy
你找到了实现这个的方法吗? - dhiraj suvarna
抱歉,我真的不记得了。我可能改变了方法或放弃了进度条的想法。 - p4bl0
2个回答

23

我遇到了同样的问题。你可以从传递给RowsAdded事件处理程序的event args中获取添加的行的索引和范围。利用这些信息循环遍历每个添加的行。e.RowIndexe.RowCount可以让您确定添加的行。

private void DataGridView1_RowsAdded(object sender, System.Windows.Forms.DataGridViewRowsAddedEventArgs e)
{
    for (int index = e.RowIndex; index <= e.RowIndex + e.RowCount - 1; index++) {
        DataGridViewRow row = DataGridView1.Rows[index];

        // Do something with the added row here
        // Raise a custom RowAdded event if you want that passes individual rows.
    }
}

如果您希望,可以继承DataGridView并创建自己的网格,在上述循环中抛出“RowAdded”事件。


1
代码更正:DataGridView1.Rows[index]; - Camille Sévigny

1
使用 System.Windows.Forms.BindingSource 是我最简单的方法。将列表添加到其中,然后使用 BindingSource 作为网格数据源。这样就可以作为网格和数据之间的中介。然后可以使用几个来自 bindingsouce 的事件。其中之一是 AddingNew。您还可以使用它来捕获添加或删除行,以及其他几件事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接