Foxtable(狐表)用户栏目专家坐堂 → [求助]DataColChanging不包含ValidateEdit的功能吗?


  共有1656人关注过本帖树形打印复制链接

主题:[求助]DataColChanging不包含ValidateEdit的功能吗?

帅哥哟,离线,有人找我吗?
shenyl0211
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]DataColChanging不包含ValidateEdit的功能吗?  发帖心情 Post By:2019/8/7 18:01:00 [只看该作者]

ValidateEdit事件中的说明如下:
  ValidateEditDataColChanging有些类似,但是ValidateEdit针对的是输入验证,而DataColChanging使用范围更广(言下之意包括了输入验证),因为任何形式导致的数据变动,包括输入以及通过代码设置,都会触发DataColChanging事件。所以实际开发的时候,最好DataColChanging事件,除非你的代码仅仅用于输入验证
  我的理解是:DataColChanging可以替代ValidateEdit。但以下两段最常用的代码(整数列输入小数时自动取整功能)结果却完全不一样,难道是我的代码有问题吗?请指教。谢谢!

  ValidateEdit事件中的下列代码执行结果是正确的:
Dim dc As DataCol = e.Col.DataCol
If dc.IsNumeric Then
  Dim v1 As Decimal
  If e.Text > "" Then
    v1 = val(e.Text)
  Else
    Return
  End If
  If dc.Datatype.name = "Int32" then
    If v1 > 2.1E9 Then
      e.Cancel = True
    ElseIf v1 < -2.1E9 Then
      e.Cancel = True
    ElseIf v1 <> cint(v1) Then
      e.text = cint(v1)
    End If
  End If
End if
  DataColChanging事件中的下列代码执行结果是错误的,小数(如1.1)被清空,但整数(如1)有效
Dim dc As DataCol = e.DataCol
If dc.IsNumeric Then
  Dim v1 As Decimal
  If e.NewValue <> 0 Then
    v1 = e.NewValue
  Else
    Return
  End If
  If dc.Datatype.name = "Int32" Then
    If v1 > 2.1E9 Then
      e.Cancel = True
    ElseIf v1 < -2.1E9 Then
      e.Cancel = True
    ElseIf v1 <> cint(v1) Then
      e.NewValue = cint(v1)
    End If
  End If
End If

[此贴子已经被作者于2019/8/7 20:45:59编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106464 积分:541467 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/8 8:56:00 [只看该作者]

只能使用ValidateEdit事件。因为这2个事件触发的时机不一样。

ValidateEdit事件在数据录入后退出编辑状态的时候做验证,这时数据还没有写入单元格
DataColChanging事件是数据被写入单元格的时候触发。由于是整数列,输入1.1默认被认为是不合法的数据被丢弃,这个事件根本都没有触发

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/8/8 10:56:00 [只看该作者]

谢谢蓝版。我是在看《宝典》的时候想起了这种测试的。
看来,帮助文档和《宝典》对这两事件的解释都不太恰当。
但是,DataRowAdding完全可由DataRowAdded代替,而且后者提示也非常有用,特别是对于网上审批的应用。

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106464 积分:541467 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/8 11:04:00 [只看该作者]

每个事件都有其使用场合,如果可以完全代替,官方又何必搞这么多重复的事件!

何况帮助文档也没有说可以完全代替,那只是您的个人理解不一样而已

 回到顶部