以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]DataColChanging不包含ValidateEdit的功能吗? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=139188) |
-- 作者:shenyl0211 -- 发布时间:2019/8/7 18:01:00 -- [求助]DataColChanging不包含ValidateEdit的功能吗? ValidateEdit事件中的说明如下: ValidateEdit和DataColChanging有些类似,但是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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/8/8 8:56:00 -- 只能使用ValidateEdit事件。因为这2个事件触发的时机不一样。 ValidateEdit事件在数据录入后退出编辑状态的时候做验证,这时数据还没有写入单元格 DataColChanging事件是数据被写入单元格的时候触发。由于是整数列,输入1.1默认被认为是不合法的数据被丢弃,这个事件根本都没有触发
|
-- 作者:shenyl0211 -- 发布时间:2019/8/8 10:56:00 -- 谢谢蓝版。我是在看《宝典》的时候想起了这种测试的。 看来,帮助文档和《宝典》对这两事件的解释都不太恰当。但是,DataRowAdding完全可由DataRowAdded代替,而且后者提示也非常有用,特别是对于网上审批的应用。
|
-- 作者:有点蓝 -- 发布时间:2019/8/8 11:04:00 -- 每个事件都有其使用场合,如果可以完全代替,官方又何必搞这么多重复的事件! 何况帮助文档也没有说可以完全代替,那只是您的个人理解不一样而已
|