仅允许 DataGridView 列的单元格中的特定值范围

Allow only specific value range in DataGridView Columns' cells

我正在推进这个项目,尽管进展缓慢。我几乎已将 DataGridView 设置为可以继续进行项目下一部分的位置。但是我发现我需要修复的最后一件事:

问题

我需要限制用户可以在 DGV 的每一列中输入的值的范围。例如:

DGV 没有固定的行数,因为用户可以通过单击按钮添加所需的行数。我已经看到示例显示了在整个 DGV 甚至行中设置值范围的类似代码,但我无法找到任何内容或帮助显示如何为每列设置范围值。

我编写了一些用于单元格验证的代码,以确保只有整数值被输入到 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

看到您的验证与 here 在 MSDN 文档中看到的几乎相同,我相信您了解所有发生的事情。请注意,在该方法中访问单元格行索引。列索引也可以这样做。由于要根据列验证单元格值的上限,我们将使用此列索引来设置要检查的上限。

尝试在 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

这应确保检查的每个单元格都在其列的可接受值范围内。