События CellValueChanged против CellValidating для DataGridView

Как лучше всего реализовать код логики проверки и код условного форматирования для DataGridView?

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

однако, это событие срабатывает слишком часто на мой вкус и я не уверен, что это необходимо. Например, это событие вызывает everytimes пользователи переключаются на другую строку.

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

теперь, поскольку так много книг используют событие CellValidating, мне интересно, нет ли gotcha (например, на дисплее) с использованием CellValueChanged?

Я понимаю, что влияние на производительность должно быть не имеет значения при использовании простых правил проверки и условного выделения, но я бы предпочел не запускать бесполезный код каждый раз, когда пользователь перемещается в другую ячейку, если этого можно избежать.

спасибо,

2 ответов


Я использую CellValueChanged в настоящее время в сетке с пользовательской проверкой и не имел проблем с отображением или чем-либо еще.

Я использовал это событие, потому что хотел запустить определенный порядок событий, но только когда пользователь изменяет значение ячейки.

Я не заметил много на пути хита производительности (протестирован со 100 - 5000 строк).

Я думаю, в конце концов, это зависит от того, что вам нужно для проверки. В моем случае, CellValueChanged имеет делал то, что хотел/в чем нуждался.

редактировать

самое главное в событии CellValidating заключается в том, что вы можете остановить пользователя от выхода из ячейки, если введенное значение не проходит проверку. Я не хотел этого делать.


его просто, внутри CellValidatingEvent вам нужно проверить, правильно ли условие. Если ваше условие ложно, вы просто добавляете этот код e.cancel. Это предотвратит потерю курсором фокуса