Я могу представить, что вы не хотите, чтобы ваш bindingSource знал, с чем он связан. В конце концов, это не то, почему вы создали bindingSource: чтобы позволить ему быть связанным практически с чем угодно.
Естественно, вы не хотите знать, как изменяется значение вашего текущего предмета; вы только хотите знать , что он был изменен.
Для этого вы используете событие BindingSource.CurrentItemChanged: какой бы метод ни использовался для изменения данных, вы получите уведомление.
Представление, связанное с BindingSource, должно сообщить BindingSource, что изменение значения завершено; редактирование свойства закончено.
В вашем случае это представление DataGridView. DataGridView сообщает BindingSource, что текущая ячейка закончила изменяться с использованием DataGridView.EndEdit ().
Обычно, когда вы печатаете ячейку, редактирование заканчивается, когда ячейка теряет фокус или когда вы нажимаете клавишу esc. Это дает вам возможность исправить ошибки ввода или отменить редактирование, если вы не хотите вносить изменения.
Однако в случае DataGridViewCheckBoxCell большинство людей ожидают завершения редактирования, как только щелкнет DataGridviewCheckBoxCell.
Поэтому вам нужно обработать событие DataGridView.CurrentCellDirtyStateChanged
// Whenever a DataGridViewCheckBoxCell becomes dirty editing is finished:
private void OnCurrentCellDirtyChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentCell is DataGridViewCheckBoxCell;
{
this.dataGridView1.EndEdit();
}
}
Это приведет к событию BindingSource.CurrentItemChanged