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


  共有1794人关注过本帖平板打印复制链接

主题:[求助]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编辑过]

 回到顶部