在网格视图中输入超过10位数字验证时无效

时间:2014-07-16 11:55:16

标签: vb.net winforms

我有一个网格视图,在网格视图中第5和第6列我只输入数字数据,我的意思是手机号码和地号,
我在gridview_cellvalidating事件中给出了这样的代码

If e.ColumnIndex = 5 Or e.ColumnIndex = 6 Then
            Dim i As Integer

            If Not String.IsNullOrEmpty(e.FormattedValue) AndAlso Not Integer.TryParse(Convert.ToString(e.FormattedValue), i) Then
                e.Cancel = True
                MsgBox("Please Enter Numeric")

            Else
            End If
        End If

但如果我只输入10位数字,此代码正常工作,在数据网格视图的第6列中我还要输入国家代码'所以我给的数字是这样的:971563158147。
这个数字超过10位,所以这次显示消息框(“请输入数字”)

我如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

当输入数字大于2,147,483,647时,您正在遇到整数的最大值。

您可以使用正则表达式来验证输入或使用Int64.TryParse

答案 1 :(得分:0)

如果您只想允许全数字输入,例如12个字符,并且实际上并不关心将其解析为数字,则可以使用正则表达式。伪代码:

Imports System.Text.RegularExpressions

Regex regex = new Regex(@"\d{12}");
If Not String.IsNullOrEmpty(e.FormattedValue) AndAlso Not regex.IsMatch(e.FormattedValue)

这将确保您获得一个非空输入,该输入由12位数字组成。现在,如果你想允许8到12位数,你只需将正则表达式更改为:

Regex regex = new Regex(@"\d{8,12}");

要解决原始查询,971563158147大于Int32的最大值,因此解析时会出现溢出。这是你错误的根源。

答案 2 :(得分:0)

check the grid's static property

检查第6个单元格的MaxInputLength,如果该字段为10,则将其更改为所需的长度