DataGridView的UserDeletingRow方法本身被调用3次

时间:2013-09-14 20:15:11

标签: c# datagridview

我使用DataGridView创建了新的Windows窗体应用程序。这是它唯一的形式。 DataGridView1_UserDeletingRow方法中的MessageBox被调用3次。我需要理解为什么会这样。显而易见的问题是DataSource,因为手动向dataGridView添加行,方法不必要地调用3次。

我还发现如果我把这行代码

dataGridView1.RowsRemoved += new DataGridViewRowsRemovedEventHandler(DataGridView1_UserDeletingRow);

之后

dataGridView1.DataSource = dt;

一切正常,方法DataGridView1_UserDeletingRow未被调用。

using System;
using System.Data;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void DataGridView1_UserDeletingRow(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            MessageBox.Show(sender.ToString());
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.RowsRemoved += new DataGridViewRowsRemovedEventHandler(DataGridView1_UserDeletingRow);

            var dt = new DataTable("myTableName");
            dt.Columns.Add("myColumnName");
            dt.Rows.Add(new object[] { 123 });

            dataGridView1.DataSource = dt;
        }
    }
}

任何人都可以解释究竟发生了什么吗?

1 个答案:

答案 0 :(得分:0)

嘿,我遇到了同样的问题,这就是我修复它的方法:

protected override void OnUserDeletedRow(DataGridViewRowEventArgs e)
{
    base.OnUserDeletedRow(e);

    //You're code here
}

我在DataGridView函数OnUserDeletedRow上使用了override,称为基函数,并添加了我想触发的代码。

此功能只触发一次并解决了我的问题,你也可以覆盖其他功能,作为听取事件的替代方法。

祝你好运。