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

时间:2015-01-29 21:35:29

标签: vb.net datagridview

我正在这个项目中继续前进,尽管很慢。我的DataGridView几乎设置为我可以进入项目的下一部分。但最后一件事我发现我需要解决:

问题

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

  • 第0列和第1列可以接受0-3000
  • 之间的值
  • 第2列可以接受0-20000之间的值
  • 第3栏(0-1000)
  • 第4栏(0-320)

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

1 个答案:

答案 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

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