Как ограничить пользовательский ввод парой значений в DataGridView
Мне нужно придумать способ запретить пользователю вводить что-либо кроме1
или же2
в колонке у меня в дгв. У меня так, что пользователь ограничен вводом номера, но мне нужны дополнительные ограничения, чтобы соответствоватьFOREIGN KEY
ограничения.
Есть идеи?
Текущая проверка на месте:
Private Sub dgvCategories_EditingControlShowing(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles dgvCategories.EditingControlShowing
CType(Me.dgvCategories.Columns(0), DataGridViewTextBoxColumn).MaxInputLength = 50
CType(Me.dgvCategories.Columns(1), DataGridViewTextBoxColumn).MaxInputLength = 1
End Sub
Private Sub dgvCategories_DataError(ByVal sender As Object, _
ByVal e As DataGridViewDataErrorEventArgs) _
Handles dgvCategories.DataError
If StrComp(e.Exception.Message, "Input string was not in a correct format.") = 0 Then
MessageBox.Show("Please Enter either 1 (Expense) or 2 (Income) in the Transaction Type column.")
'This will change the number back to original
dgvCategories.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = " "
End If
End Sub
Игра с решениями:
Dim CurValue As Integer
Private Sub dgvCategories_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgvCategories.CellEnter
CurValue = dgvCategories.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value
End Sub
Private Sub dgvCategories_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgvCategories.CellEndEdit
Dim NewValue As Integer = dgvCategories.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value
If NewValue < 1 Or NewValue > 2 Then
dgvCategories.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value = CurValue
End If
End Sub
Я получаю эту ошибку:Conversion from string "Unassigned" to type 'Integer' is not valid.
Я предполагаю, что это изNULL
записи в «Новой строке» в datagridview.
Есть предположения о том, как изменить это решение?
РЕДАКТИРОВАТЬ: Благодаря Nocturnal я изменил свою логику так:
Private Function CleanInputNumber(ByVal str As String) As String
Return System.Text.RegularExpressions.Regex.Replace(str, "[03456789]", "1")
End Function
Private Sub xDataGridView_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
If DataGridView1.CurrentRow.Cells("ColumnType").IsInEditMode Then
Dim c As Control = DataGridView1.EditingControl
Select Case DataGridView1.Columns(e.ColumnIndex).Name
Case "ColumnType"
c.Text = CleanInputNumber(c.Text)
End Select
End If
End Sub
Работает как шарм!