So beschränken Sie die Benutzereingabe auf einige Werte in einer DataGridView

Ich muss einen Weg finden, um den Benutzer daran zu hindern, etwas anderes als einzugeben1 oder2 in einer spalte in meinem dgv. Ich habe es so, dass der Benutzer auf die Eingabe einer Nummer beschränkt ist, aber ich brauche weitere Einschränkungen, um die zu erfüllenFOREIGN KEY Einschränkungen.

Irgendwelche Ideen?

Aktuelle Validierung vorhanden:

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

Herumspielen mit Lösungen:

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

Ich erhalte diesen Fehler:Conversion from string "Unassigned" to type 'Integer' is not valid.

Was ich annehme, ist vomNULL Einträge in der "New Row" der Datengitteransicht.

Irgendwelche Ratschläge, wie diese Lösung geändert werden kann?

BEARBEITEN: Dank Nocturnal habe ich meine Logik folgendermaßen geändert:

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

Klappt wunderbar!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage