【发布时间】:2020-05-28 08:52:35
【问题描述】:
下面的代码来自一个简单的测试应用程序,在表单上只包含一个复选框。
DataTable dt;
public Form1()
{
InitializeComponent();
dt = new DataTable();
dt.Columns.Add("bool", typeof(bool));
dt.Columns.Add("s", typeof(string));
dt.Rows.Add(new object[2] { false, "" });
checkBox1.DataBindings.Add("Checked", dt, "bool", false, DataSourceUpdateMode.OnValidation);
checkBox1.CheckedChanged += CheckBox_CheckedChanged;
}
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
dt.Rows[0]["s"] = "test";
}
这条线dt.Rows[0]["s"] = "test";
使复选框不可点击。 CheckedChanged 被触发 2 次。响应点击事件后的第一次。第二次被堆栈中显示 CurrencyManager 和 BindingManagerBase.PushData 的外部代码调用。
如果我删除这一行或在计时器中运行它,checkBox 的行为是正常的。
【问题讨论】:
-
将绑定更改为
DataSourceUpdateMode.OnPropertyChanged。
标签: c# winforms data-binding