Порядок событий, относящихся к тому, что вы пытаетесь сделать, таков:
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());
}