Каков наилучший способ заставить ячейку DataGridView принимать только числовой ввод? - PullRequest
3 голосов
/ 15 января 2009

В настоящее время я использую:

Private Sub dgvStock_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvStock.CellEndEdit
    Select Case Me.dgvStock.Columns(e.ColumnIndex).Name
        Case "Quantity", "Unit Cost"
            If Not IsNumeric(Me.dgvStock(e.ColumnIndex, e.RowIndex).Value) Then
                Me.dgvStock(e.ColumnIndex, e.RowIndex).Value = 0
            End If
    End Select
End Sub

а есть ли более элегантное решение? Во-первых, было бы лучше предотвратить нецифровый ввод, чем исправлять его после ввода.

Ответы [ 2 ]

2 голосов
/ 16 января 2009

Решение, которое вы опубликовали, может работать лучше, если вы прослушали событие KeyPress, а не событие CellEndEdit. Затем вы можете проверить действительные значения, когда пользователь вводит текстовое поле, и вернуться к предыдущему значению, если введенное значение недопустимо.

Или, наоборот, это не совсем то, о чем вы просите, но у вас может быть какой-то визуальный индикатор, который сообщает пользователю, что он печатает недопустимо, например, изменяя ForeColor на Red? Это будет информировать пользователя о неверных данных, не путая его или ее с текстовым полем, в котором будут отказываться от нажатия некоторых клавиш. Это в сочетании с вашей текущей проверкой записи может быть хорошим решением.

1 голос
/ 27 января 2009

Вы также можете установить свойство ErrorText строки и проверить флаг или текст ошибки в событии RowValidating. Если ошибка существует, установите Cancel в true. Не забудьте установить в тексте ошибки пустую строку, когда значение станет действительным.

UPDATE:

Я только что попробовал это и пришел к лучшему решению: Проверьте значение в событии CellValidating и установите текст ошибки, потому что здесь вы можете отменить проверку. Текущее введенное значение можно получить через сетку свойств [e.ColumnIndex, e.RowIndex] .EditedFormattedValue

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