【问题标题】:DataGridView row added eventDataGridView 行添加事件
【发布时间】:2010-04-16 13:09:47
【问题描述】:

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

我已经有了正确的列,并且我准确地映射了这些字段。我要做的是处理一种RowAddedRowDataBound(如在 aspx GridView 中)事件。

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

e.RowCount:1 e.RowIndex:0 e.RowCount:[n-1] e.RowIndex:1 *其中 n 是我的项目数

有没有办法让我找到每个项目的句柄?

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

【问题讨论】:

  • 每次添加一行时都需要回调,还是拥有所有行的集合就足够了?如果是后者,Rows 属性在调用 RowsAdded 时是否具有所有行的有效集合?
  • 对不起,可能我解释的不是很好。每次添加一行时我都需要一个回调。
  • 只是出于好奇......你到底想完成什么?
  • 你找到实现这个的方法了吗?
  • 对不起,我真的不记得了。我可能改变了方法或放弃了进度条的想法。

标签: c# datagridview


【解决方案1】:

我刚刚遇到了同样的问题。您可以从传递给 RowsAdded 事件处理程序的事件参数中获取添加的行的索引和范围。使用此信息循环遍历添加的每一行。 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”事件。

【讨论】:

  • 代码更正:DataGridView1.Rows[index];
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多