Код ниже взят из простого тестового приложения, содержащего только один флажок в форме.
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 будет нормальным.