Cómo restringir la entrada del usuario a un par de valores en un DataGridView

Necesito encontrar una manera de restringir que el usuario ingrese algo que no sea1 o2 en una columna en mi dgv. Lo tengo para que el usuario esté restringido a ingresar un número, pero necesito más restricciones para cumplir con elFOREIGN KEY restricciones

¿Algunas ideas?

Validación actual en el lugar:

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

Jugando con soluciones:

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

Me sale este error:Conversion from string "Unassigned" to type 'Integer' is not valid.

Lo que supongo es delNULL entradas en la "Nueva fila" de la vista de cuadrícula de datos.

¿Alguna idea de cómo modificar esta solución?

EDITAR: Gracias a Nocturnal, cambié mi lógica a esto:

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

¡Funciona de maravilla!

Respuestas a la pregunta(1)

Su respuesta a la pregunta