После какого события я должен выполнить действие после редактирования ячейки в DataGridView? - PullRequest
4 голосов
/ 24 марта 2010

У меня есть элемент управления WinForms DataGridView на форме. В этом DataGridControl есть два поля:

  • Email Address
  • Resolved Email Address (рассчитано на основе ввода в Email Address)

После того, как пользователь введет или изменит значение в Email Address, я хочу, чтобы значение в Resolved Email Address обновлялось на основе отдельного метода. К какому событию я должен подключиться, чтобы ячейка Resolved Email Address обновлялась после обновления ячейки Email Address?

Я не уверен, куда поместить событие, потому что пользователь мог сделать несколько вещей после добавления / изменения значения: перейти к следующей ячейке, нажать кнопку «Отмена» в форме, нажать «ОК» в форме и т. Д. Любой идеи?

Ответы [ 3 ]

2 голосов
/ 17 июня 2011

Порядок событий, относящихся к тому, что вы пытаетесь сделать, таков:

  • 1) CellValidating

  • 2) CellValueChanged

  • 3) CellValidated

  • 4) CellEndEdit

Я бы порекомендовал использовать CellValidating, если вы хотитечтобы предотвратить дальнейшие действия в зависимости от содержимого ячейки, поскольку в CellValidating вы можете установить флаг e.Cancel, содержащийся в DataGridViewCellValidatingEventArgs, в значение true, что автоматически вернет управление этой ячейке.

Если вы просто хотите обновить отображение (разрешенное имя электронной почты), используйте CellValueChanged.


private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    e.Cancel = (!validateMyInput(e.FormattedValue.ToString());
}
1 голос
/ 24 марта 2010

Вот что я сделал:

Используйте события dataGridView CellBeginEdit и CellEndEdit для управления вещами. Если вы редактируете ячейку адреса электронной почты и вкладки из нее, она вызовет событие CellEndEdit.

Вы должны получить событие CellEndEdit и событие нажатия кнопки, когда вы нажимаете одну из этих кнопок - в моих тестах я всегда сначала получал CellEndEdit, но, полагаю, YMMV.

Если при возникновении CellEndEdit было что-то недопустимое, вы можете не допустить выполнения кода OK / Отмена.


Кроме того, вы можете использовать событие CellValidating и e.Отменить событие, если значение недопустимо. Это предотвратит срабатывание события нажатия кнопки и оставит вас в отредактированной ячейке.

1 голос
/ 24 марта 2010

CellValueChanged срабатывает, когда редактирование завершено, например, когда пользователь ушел от клетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...