我的代码阻止用户退出字段,但它仍然无法正常工作

时间:2013-07-01 19:12:21

标签: vb.net validation datagridview

我正在尝试找到一种方法来阻止用户在提供错误输入时退出datagridviewcell。对于有问题的datagridview列,我想阻止用户输入负数,包括零和空白字段。现在我能够阻止此输入,并显示相应的消息,但我不知道在显示消息后如何防止用户表单退出单元格。我的代码如下所示。如果有人对此问题有任何建议或解答,我将非常感谢您给予的任何帮助。

 Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    If (e.ColumnIndex = 2) Then
        Dim cellData = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
        If cellData Is Nothing OrElse IsDBNull(cellData) OrElse cellData.ToString = String.Empty Then
            MessageBox.Show("Cannot Be Empty")
            e.Cancel = True
        ElseIf cellData <= 0 Then
            MessageBox.Show("Negative Numbers and Zero Not Allowed")
            e.Cancel = True
            Exit Sub



        End If

    End If
End Sub

3 个答案:

答案 0 :(得分:1)

试试这种方式..

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating    

    If (e.ColumnIndex = 2) Then
        Dim cellData = e.FormattedValue 

        If cellData Is Nothing OrElse IsDBNull(cellData) OrElse cellData.ToString = String.Empty Then
            MessageBox.Show("Cannot Be Empty")
            e.Cancel = True
        Else
            If val(cellData) <= 0 Then
               MessageBox.Show("Negative Numbers and Zero Not Allowed")
               e.Cancel = True
               Exit Sub
            Endif    

        End If

    End If
End Sub

答案 1 :(得分:1)

又是你了;-)尝试使用SendKeys并使用CellEndEdit事件。这不是完美的解决方案,但至少它会完成工作(希望如此)。请参阅以下代码:

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

    If (e.ColumnIndex = 0) Then 'checking value for column 1 only
        Dim cellValue As Integer
        If (Int32.TryParse(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value, cellValue)) Then
            If cellValue < 0 Then
                MessageBox.Show("Negative Numbers Not Allowed") 'This prevents negative numbers
                SendKeys.Send("+{Tab}")
            End If
        Else
            Dim testValue As String = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
            If (String.IsNullOrEmpty(testValue)) Then
                MessageBox.Show("Name Cannot Be Empty")
                SendKeys.Send("+{Tab}")
            End If
        End If

    End If


End Sub

答案 2 :(得分:0)

使用DataGridView.CellValidating事件,并设置e.Cancel = truehttp://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvalidating.aspx