События CellValueChanged против CellValidating для DataGridView
Как лучше всего реализовать код логики проверки и код условного форматирования для DataGridView?
во многих книгах и статьях, которые я читал на этом элементе управления, кажется, что соответствующее событие для обработки этого-CellValidating. Ну, название более чем подразумевает это.
однако, это событие срабатывает слишком часто на мой вкус и я не уверен, что это необходимо. Например, это событие вызывает everytimes пользователи переключаются на другую строку.
с другой стороны, событие CellValueChanged запускается только при изменении значения ячейки, что означает, что код проверки выполняется только при изменении значения, а не каждый раз, когда пользователь изменяет ячейки.
теперь, поскольку так много книг используют событие CellValidating, мне интересно, нет ли gotcha (например, на дисплее) с использованием CellValueChanged?
Я понимаю, что влияние на производительность должно быть не имеет значения при использовании простых правил проверки и условного выделения, но я бы предпочел не запускать бесполезный код каждый раз, когда пользователь перемещается в другую ячейку, если этого можно избежать.
спасибо,
2 ответов
Я использую CellValueChanged в настоящее время в сетке с пользовательской проверкой и не имел проблем с отображением или чем-либо еще.
Я использовал это событие, потому что хотел запустить определенный порядок событий, но только когда пользователь изменяет значение ячейки.
Я не заметил много на пути хита производительности (протестирован со 100 - 5000 строк).
Я думаю, в конце концов, это зависит от того, что вам нужно для проверки. В моем случае, CellValueChanged имеет делал то, что хотел/в чем нуждался.
редактировать
самое главное в событии CellValidating заключается в том, что вы можете остановить пользователя от выхода из ячейки, если введенное значение не проходит проверку. Я не хотел этого делать.
его просто, внутри CellValidatingEvent вам нужно проверить, правильно ли условие. Если ваше условие ложно, вы просто добавляете этот код e.cancel
. Это предотвратит потерю курсором фокуса