我正在这个项目中继续前进,尽管很慢。我的DataGridView几乎设置为我可以进入项目的下一部分。但最后一件事我发现我需要解决:
问题
我需要限制用户可以输入DGV每列的值范围。例如:
DGV没有设定的行数,因为用户可以通过单击按钮添加所需的行数。我已经看到示例显示了在整个DGV甚至行中设置值范围的类似代码,但是我无法找到任何内容或帮助显示如何为每列设置范围值。
我有一些用于单元验证的代码,以确保只有Integer值输入到DGV中并且没有单元格为空。有没有办法添加到此代码或修改它以解决我当前的问题?如果是这样,有人可以提供一些帮助让我开始吗? - 谢谢你,新手。
Private Sub LftMtr_Data_Grid_CellValidating(ByVal sender As Object, _
ByVal e _
As DataGridViewCellValidatingEventArgs) _
Handles LftMtr_Data_Grid.CellValidating
Me.LftMtr_Data_Grid.Rows(e.RowIndex).ErrorText = ""
Dim newInteger As Integer
' Don't try to validate the 'new row' until finished
' editing since there
' is not any point in validating its initial value.
If LftMtr_Data_Grid.Rows(e.RowIndex).IsNewRow Then Return
If Not Integer.TryParse(e.FormattedValue.ToString(), newInteger) _
OrElse newInteger < 0 Then
e.Cancel = True
Me.LftMtr_Data_Grid.Rows(e.RowIndex).ErrorText = "Cells must not be null and must equal a non-negative integer"
End If
End Sub
答案 0 :(得分:0)
看到您的验证与MSDN文档中的here几乎相同,我相信您了解所有情况。请注意,在方法中访问单元行索引。列索引也可以这样做。由于您要根据列验证单元格值的上限,我们将使用此列索引设置要检查的上限。
尝试在Dim newInteger As Integer
之后但在If语句之前添加以下代码:
Dim upperLimit As Integer = 0
Select Case e.ColumnIndex
Case 0, 1
upperLimit = 3000
Case 2
upperLimit = 20000
Case 3
upperLimit = 1000
Case 4
upperLimit = 320
Case Else
Debug.WriteLine("You decide what should happen here...")
End Select
最后,修改你的If语句:
If Not Integer.TryParse(e.FormattedValue.ToString(), newInteger) _
OrElse newInteger < 0
OrElse newInteger > upperLimit Then
这应确保检查的每个单元格都在其列的可接受值范围内。