Я прочитал несколько постов на эту тему, но ни один из них, похоже, не соответствует моей конкретной ситуации.Я в основном хочу выполнить некоторый код для копирования данных из ячейки DataGridView, как только пользователь внес какие-либо изменения.Но, в частности, я хочу получить значение только после того, как пользователь завершил редактирование ячейки И, если значение ячейки на самом деле отличается (например, пользователь не отменил редактирование).Требуемое поведение идентично тому, как Excel обновляет формулы для ячеек только после того, как пользователь фактически обновил формулу для ячейки.Итак, вот код, с которого я начинаю:
private void MyDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
// Exit this event procedure if no rows have been added to the DataGridView yet (during program initialization)
if (e.RowIndex < 0)
{
return;
}
// Get an object reference to the current Value cell
DataGridViewCell cell = (DataGridViewCell)MyDataGridView.Rows[e.RowIndex].Cells[1];
// Do other stuff with the cell data here
}
private void MyDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
// Force the CellValueChanged event to trigger for the control if the current cell's value has changed
if (MyDataGridView.IsCurrentCellDirty)
{
MyDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
Он работает так, что событие CellValueChanged срабатывает каждый раз, когда выполняется редактирование.Однако событие возникает каждый раз, когда пользователь вводит ключ в режиме редактирования, и я просто хочу, чтобы оно срабатывало один раз после выхода пользователя из режима редактирования (и при условии, что изменения были сделаны и не были отменены).Каков наилучший способ приблизиться к этому?Я также посмотрел на событие CellEndEdit
, которое, кажется, немного приблизило меня, но у меня все еще нет способа определить, было ли редактирование зафиксировано или отменено.Какой лучший / рекомендуемый подход для этого?