Я нашел несколько сообщений с ответами на это, но ни один из них не работает для меня. Почему что-то должно быть так просто так сложно?Слушайте флажок
Все, что я хочу, это сделать что-то в ответ на то, что кто-то проверяет/снимает флажок с флажками. Одно решение работает большую часть времени, но иногда события не запускаются. Один я видел в нескольких местах говорят что-то вроде этого:
private void dgv1_CurrentCellDirtyStateChanged(object sender, EventArgs e) {
if (dgv1.IsCurrentCellDirty) {
dgv1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void dgv1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
// Do whatever I want to do.
}
К сожалению, CellValueChanged просто не вызывалась. я проверил и дважды проверил, что оба слушатели добавляют:
dgv1.CellValueChanged += new DataGridViewCellEventHandler(dgv1_CellValueChanged);
dgv1.CurrentCellDirtyStateChanged += new EventHandler(dgv1_CurrentCellDirtyStateChanged);
я добавил печати заявления в обоих methodsto проверить, что метод theCellValueChanged никогда не вызывался, хотя CurrentCellDirtyStateChanged один. Что я делаю не так?
Редактировать: Я использую DataTable с данным DataGridView. Будет ли я лучше слушать это? Происходит ли изменение в DataTable до того, как я покину ячейку?
Простота проверки или снятия флажка не вызывает события CellValueChanged. Я думаю, что этот флажок сначала должен потерять фокус. Вы можете взглянуть на детали в MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx –
@David Это причина события CurrentCellDirtyStateChanged - см. [http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx](http://msdn.microsoft.com/en-us/library/system.windows .forms.datagridview.currentcelldirtystatechanged.aspx) – ferzle