2013-08-08 2 views
0

В моем проекте есть DataGridView, который пользователь может редактировать и сохранять в БД. Я пытаюсь добавить валидацию в DataGridView. (Требуются определенные столбцы и могут быть только номерами (в частности, удваивается)).datagridview отключить автоматический разбор

У меня возникли проблемы с работой над автоматизированным разбором, выполненным .Net за кулисами. Поведение DataGridView отличается в зависимости от того, покидает ли пользователь обязательное поле пустым или вводит что-то, что не может быть проанализировано как двойное (т. Е. Текст).

Простой случай: если пользователь оставляет обязательное поле пустым и щелкает Сохранить. Событие щелчка кнопки «Сохранить» срабатывает, и я могу проверить, что свойство Value ячейки установлено в DBNull, и в этом случае я установил свойство ячейки ErrorText и покажу MessageBox.

Harder Case: Когда пользователь вводит текст, который не может быть проанализирован как двойной (например, «asdf»). Когда это происходит, как только ячейка теряет фокус, некоторые встроенные проверки .Net происходят за кулисами, и я получаю окно сообщения, показывающее трассировку стека. Я хочу полностью отключить эту проверку и просто выполнить свою собственную проверку, когда пользователь нажимает кнопку «Сохранить».

(До этого момента неверные данные не имеют значения). Кто-нибудь знает как это сделать?

ответ

0

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

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating 
    e.Cancel = True 
End Sub 
+0

Ни один из этих вариантов не работал. Установка CausesValidation = false, казалось, не повлияла, и с помощью обработчика CellValidating, который вы предположили, вызвал окно с сообщением об ошибке в form_load (при заполнении сетки), поскольку отмена события означает, что ему не удалось зафиксировать значение ячейки. – user2410449

0

Я смог решить свою проблему, отредактировав свой SQL-запрос, чтобы преобразовать поплавки в nvarchars. Теперь DataGridView считает, что тип данных - это текст, который он не может проверить с помощью любой логики по умолчанию. Я также обнаружил, что значение не выполняется, если только пользователь не попал в него, поэтому мой код проверки проверяется вместо свойства EditedFormattedValue ячейки, а не Value.

Смежные вопросы