找回密码
 立即注册

QQ登录

只需一步,快速开始

chenf1980

论坛元老

41

主题

147

帖子

9349

积分

论坛元老

积分
9349

活字格认证

chenf1980
论坛元老   /  发表于:2011-5-20 17:54  /   查看:9933  /  回复:11
数据库的有个字段为number,长度为10
在MultiRow的cell里面,长度也设置为10,结果输入1111111111没事,输入9999999999就出问题了。

multiRow里面,我添加了一个事件,是为了format用的:
Protected Overrides Sub OnCellFormatting(ByVal e As GrapeCity.Win.MultiRow.CellFormattingEventArgs)
            If TypeOf Me.Rows(e.RowIndex)(e.CellIndex) Is NumericUpDownCell _
                    OrElse Not String.IsNullOrEmpty(e.CellStyle.Format) Then
                Dim value As Object = e.Value
                If value IsNot Nothing AndAlso Not IsDBNull(value) Then
                    If IsNumeric(value) Then
                             e.Value = CDec(value).ToString(e.CellStyle.Format)
                    End If
                End If
            End If
            MyBase.OnCellFormatting(e)
        End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

11 个回复

倒序浏览
neil
论坛元老   /  发表于:2011-5-20 19:37:00
沙发

回复 1# chenf1980 的帖子

Int32 所能表示的最大值是:2,147,483,647  。   约为21亿。
但你输入的是十个9, 就是 : 9,999,999,999 。  约为99亿。  
所以这个异常是由系统抛出的, 因为你超过了int的最大值。
回复 使用道具 举报
chenf1980
论坛元老   /  发表于:2011-5-21 11:03:00
板凳
嗯,我明白,应该怎么改成绑定成int64呢?因为数据库中10位长度的
回复 使用道具 举报
barrylei
中级会员   /  发表于:2011-5-21 11:10:00
地板
在模板上把你要绑的那个Cell的ValueType设置成Int64就可以了。

  1.             TextBoxCell text = new TextBoxCell();
  2.             text.ValueType = typeof(Int64);
复制代码
回复 使用道具 举报
chenf1980
论坛元老   /  发表于:2011-5-21 13:44:00
5#
奇怪的,valuetype改成int64之后,还是出现了更上面图片同样的错误。请问,应该如何修改?
回复 使用道具 举报
chenf1980
论坛元老   /  发表于:2011-5-21 15:49:00
6#
版主都是双休的吗?
回复 使用道具 举报
barrylei
中级会员   /  发表于:2011-5-23 09:14:00
7#
我们是双休的,刚好周六加班,看到你的帖子,所以就回了。
回复 使用道具 举报
barrylei
中级会员   /  发表于:2011-5-23 09:18:00
8#

回复 5# chenf1980 的帖子

》奇怪的,valuetype改成int64之后,还是出现了更上面图片同样的错误。请问,应该如何修改?

如果还是出现相同的错误,那确实有一点奇怪,因为从异常的信息来看,它报的是Int32转换异常。
这样,你能给我发一个Sample吗,我来check一下。数据库连接那边你不需要附加你的数据库,你写一个DataTable模拟你的数据库,一两个字段就可以。只要问题能重现就行。
回复 使用道具 举报
chenf1980
论坛元老   /  发表于:2011-5-23 09:56:00
9#
是类型转化异常。如果用datatable模拟数据库的话,如果一开始指定类型为int32
Dim columnNameList As New ArrayList(New String() {"C1", "C2", "C3", "C4", "C5", "C6", "C7"})
        Dim dtTable As New DataTable
        For ii = 0 To 6
            dtTable.Columns.Add(columnNameList(ii), GetType(Int32))
        Next
那么尽管后面对这个Cell进行重新指定
Protected Overrides Sub OnCellValidating(ByVal e As GrapeCity.Win.MultiRow.CellValidatingEventArgs)
        Me.Item(e.RowIndex, e.CellName).ValueType = GetType(Int64)
        MyBase.OnCellValidating(e)  
  End Sub

这样的话,还是不行
回复 使用道具 举报
neil
论坛元老   /  发表于:2011-5-23 10:25:00
10#

回复 9# chenf1980 的帖子

你设的format是什么样子的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部