DataGridView中的最后一行验证

时间:2018-08-01 14:04:33

标签: vb.net datagridview verification

我有这段代码,用于验证DataGridView中的行。它检查该行中单元格的内容是否在0到10之间,如果是11+,则将其突出显示为红色。

我遇到的问题是,即使所有数字都在0到10之间,该行的最后一行也会突出显示为红色。 这是某种文件结尾情况吗?

在代码中,如果单元格为空,则什么也不会发生。因此,我认为最后一行也不应该做任何事情(只要是0-10)

For Each row As DataGridViewRow In DataGridView1.Rows
    If Not row.Cells("F3").Value Is DBNull.Value Then
        Dim cellNumber As Integer

        If Integer.TryParse(row.Cells("F3").Value, cellNumber) AndAlso cellNumber >= 0 AndAlso cellNumber <= 10 Then
            'All pass verification, Do nothing
        Else
            'Point out the wrong value 
            row.Cells("F3").Style.BackColor = Color.Red
        End If
    Else
        '    MessageBox.Show("Not a number!")
    End If
Next

2 个答案:

答案 0 :(得分:1)

在CellValidating事件中,应检查ColumnIndex是否为所需的列,而当前行不是新行。之后,您应该检查该值是否在您的范围内。

看看这个例子(我不知道索引F3是什么,所以我假设0):

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    If e.ColumnIndex = 0 AndAlso Not DataGridView1.Rows.Item(e.RowIndex).IsNewRow Then
        Dim value As String = e.FormattedValue.ToString()
        Dim numericValue As Integer

        With DataGridView1.Rows.Item(e.RowIndex).Cells.Item(e.ColumnIndex).Style
            If Integer.TryParse(e.FormattedValue.ToString, numericValue) AndAlso numericValue >= 0 AndAlso numericValue <= 10 Then
                .BackColor = Color.White
                .ForeColor = Color.Black
            Else
                .BackColor = Color.Red
                .ForeColor = Color.White
            End If
        End With
    End If
End Sub

答案 1 :(得分:0)

我弄清楚我缺少的那一行.. 我必须添加:

  

也不是row.Cells(“ F11”)。value什么都没有

拥有:

  

如果不是row.Cells(“ F3”)。Value为DBNull.Value并且还不是row.Cells(“ F11”)。value为空,则