自定义DataGridViewColumn以将用户输入限制为数字

时间:2015-11-15 15:03:47

标签: vb.net datagridview numbers

我正在尝试使用只接受数字的自定义DataGridViewTextBoxCell创建自定义DataGridViewColumn。我发现的所有解决方案都涉及向实际特定DataGridView的EditingControlShowing添加事件处理程序。但是,我想创建一个自定义DataGridViewColumn,当​​添加到任何DataGridView时,会自动限制用户输入。

有什么办法可以做到吗?

Public Class datagridviewNumberColumn
Inherits DataGridViewColumn

Public Sub New()
    MyBase.New(New datagridviewNumberCell())
End Sub

Public Overrides Property CellTemplate() As DataGridViewCell
    Get
        Return MyBase.CellTemplate
    End Get
    Set(ByVal value As DataGridViewCell)


        If (value IsNot Nothing) AndAlso _
            Not value.GetType().IsAssignableFrom(GetType(datagridviewNumberCell)) _
            Then
            Throw New InvalidCastException("Must be a datagridviewNumberCell")
        End If
        MyBase.CellTemplate = value

    End Set
End Property

End Class

Public Class datagridviewNumberCell
Inherits DataGridViewTextBoxCell

Protected Overrides Sub OnKeyPress(e As System.Windows.Forms.KeyPressEventArgs, rowIndex As Integer)
    MyBase.OnKeyPress(e, rowIndex)

    If Not IsNumeric(e.KeyChar) Then e.Handled = True

End Sub

End Class

我的尝试在上面,但不起作用。永远不会触发OnKeyPress事件。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

听起来你只想将datagridview中的用户输入限制为整数,是吗? 您应该可以使用列的ValueType属性执行此操作:https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.valuetype%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

例如:

            col.ValueType = GetType(Integer)

在创建和填充datagridview时设置它。