DataGridView行添加了事件

时间:2010-04-16 13:09:48

标签: c# datagridview

我正在使用DataGridView并将List绑定到DataSource。

我已经有了正确的列,我准确地映射了字段。我正在尝试做的是处理一种RowAddedRowDataBound(就像在aspx GridView中)事件。

我发现的唯一事件是RowsAdded,但无论我拥有多少项,它在我第一次绑定时仅被触发4次,而在其他时间被触发两次,值为

e.RowCount:1 e.RowIndex:0 e.RowCount:[n-1] e.RowIndex:1 *其中n是我的物品数量

有没有办法可以找到每个项目的句柄?

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

2 个答案:

答案 0 :(得分:20)

我刚遇到同样的问题。您可以获取从传递给RowsAdded事件处理程序的事件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 :(得分:0)

对我来说最简单的方法是使用System.Windows.Forms.BindingSource。将列表添加到该列表,然后使用BindingSource作为网格DataSource。然后,它充当网格和数据的中间人。

然后可以从bindingsouce中使用几个事件。其中之一是AddingNew。您还可以使用它来捕获要添加或删除的行,以及其他一些内容。