C# DataGridView';s UserDeletingRow方法本身被调用了3次
我用DataGridView创建了新的windows窗体应用程序。这是它唯一的形式。 DataGridView1_UserDeletingRow方法中的MessageBox被调用了3次。我需要理解为什么会这样。明显的问题是DataSource,因为手动将行添加到dataGridView中,方法是而不是不必要地调用了3次 我还发现如果我把这行代码C# DataGridView';s UserDeletingRow方法本身被调用了3次,c#,datagridview,C#,Datagridview,我用DataGridView创建了新的windows窗体应用程序。这是它唯一的形式。 DataGridView1_UserDeletingRow方法中的MessageBox被调用了3次。我需要理解为什么会这样。明显的问题是DataSource,因为手动将行添加到dataGridView中,方法是而不是不必要地调用了3次 我还发现如果我把这行代码 dataGridView1.RowsRemoved += new DataGridViewRowsRemovedEventHandler(DataGri
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;
}
}
}
有人能解释一下到底发生了什么吗?嘿,我刚才也遇到了同样的问题,我就是这样解决的:
protected override void OnUserDeletedRow(DataGridViewRowEventArgs e)
{
base.OnUserDeletedRow(e);
//You're code here
}
我在DataGridView函数OnUserDeletedRow上使用了覆盖,调用了基函数并添加了我想要触发的代码
此函数只触发一次并解决了我的问题,您还可以覆盖其他类似的函数,以替代侦听事件
祝你好运。很难理解这一点,因为它涉及到
数据源=…
的内部实现(数据源的设置器)。如果不使用数据源
,一切都将正常。仅在数据源
的初始化
时才会发生这种情况,在为数据源
赋值后,您可以尝试向数据表
(基础源)添加行并从中删除行,您将看到,RowsAdded
和RowsRemoved
将以正确的次数被激发。@King这很烦人。。。调用该方法的次数完全不可预测。我创建这个应用程序只是为了得到一些答案。在我的实际应用中,该方法被调用了2次,而不是3次,你能相信吗?实际上……不是这样,问题是我们不太了解数据源设置器的实现,如果您设置allowUserToAddress=false
,则触发时间将减少到2次。然而,正如我所说,只有在初始化数据源时才会发生这种情况,您可以使用一些标志来排除这个初始的特殊情况,然后,一切都会正常工作。@King好吧,标志确实是一个解决方案,但我认为有更好的方法。无论如何,谢谢你的帮助。@Tvde1对不起,我不懂你的意思。