CellValueChanged и CellValidating События для DataGridView - PullRequest
9 голосов
/ 12 августа 2010

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

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

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

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

Теперь, поскольку во многих книгах используется событие CellValidating, мне интересно, нет ли какой-либо ошибки (например, в отображении) с использованием CellValueChanged?

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

Спасибо,

Ответы [ 2 ]

4 голосов
/ 12 августа 2010

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

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

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

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

РЕДАКТИРОВАТЬ

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

0 голосов
/ 25 января 2018

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

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