我有这段代码,用于验证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
答案 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为空,则