Foxtable(狐表)用户栏目专家坐堂 → 数据变动判断


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

主题:数据变动判断

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
数据变动判断  发帖心情 Post By:2009/5/13 15:58:00 [只看该作者]

如有表A,修改第二列某单元格数据时,如大于原值,提示,并返回原值。如何实现?请教各位了


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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2009/5/13 16:07:00 [只看该作者]

DataColChanging

某一列的内容发生变化前执行,此时列的内容还是更改前的值。
利用此事件,我们可以在某列内容发生变化之前进行拦截判断,如果不符合特定的条件,则取消此次变化,或者重新指定一个值。

e参数属性:

DataTable: 返回发生数据更改的数据表。
DataRow:   返回发生数据更改的数据行。
DataCol:   返回数据更改的数据列。
NewValue:  Object类型,表示新的值
Cancel:    逻辑(Boolean)类型,设为True取消更改。

示例

例如在订单表中,要求折扣列的值不能超过0.15,可以在DataColChanging时间中设置如下代码:

If e.DataCol.Name = "折扣" Then '如果是折扣列的内容发生变化。
   
If e.NewValue > 0.15 Then '如果新值大于0.15。
        e.Cancel =
True '取消变动。
   
End If
End
If

上面的代码在折扣超出0.15后,取消此次变动;如果希望在折扣超出0.15后,自动改为0.15,代码如下:

If e.DataCol.Name = "折扣" Then '如果是折扣列的内容发生变化。
    If
e.NewValue > 0.15 Then '如果输入的内容大于0.15。
        e
.NewValue = 0.15 '那么改为0.15。
    End If
End If

通过更改NewValue参数的值,我们可以实现代码输入,例如:

If e.DataCol.Name = "产品" Then '如果是产品列的内容发生变化。
   
If e.NewValue = "tv" Then '如果新值是"tv"。
        e.NewValue =
"电视机" '那么将"tv"替换为"电视机"
   
ElseIf e.NewValue = "tel" '如果新值是"tel"
        e.NewValue =
"电话机" '那么将"tel"替换为"电话机"
   
End If
End
If

设置上述代码后,如果你在产品列输入tv,将自动替换为电视机,如果输入tel,自动替换为电话机。


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/5/13 17:47:00 [只看该作者]

关键是原值如何取得的问题,上面这些我知。新值与原值的比较,如何编写?谢谢帮忙!


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/5/13 17:49:00 [只看该作者]

如有表A,修改第二列某单元格数据时,如大于原值,提示,并返回原值。如何实现?请教各位了


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/5/13 17:49:00 [只看该作者]

e.NewValue  是新值
e.DataRow(e.DataCol.Name) 是原来的值

也只有在DataColChanging事件能够同时获得新值和旧值,因为此时新值还没有覆盖旧值。

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2009/5/13 17:50:00 [只看该作者]

以下是引用baoxyang在2009-5-13 17:47:00的发言:

关键是原值如何取得的问题,上面这些我知。新值与原值的比较,如何编写?谢谢帮忙!

If e.DataCol.Name = "折扣" Then '如果是折扣列的内容发生变化。
    If
e.NewValue > e.datarow("折扣") Then 
         e.Cancel = True 

    End If
End If


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/5/13 17:54:00 [只看该作者]

哦,谢了!

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/5/14 9:21:00 [只看该作者]

新增加一条记录时就会判断DataColChanging中值的变化吗?如新增记录不进行此事件代码?


 回到顶部
帅哥,在线噢!
kylin
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19229 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2009/5/14 10:04:00 [只看该作者]

 加一个e.NewValue isnot Null的判断就可以
 

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/5/14 11:05:00 [只看该作者]

只能修改一次,成功后,再进行修改,只能根据成功的列值再次输入的值进行判断,可否再次根据原值(也就是初始值)与输入值进行判断呢?如何执行?请教各位了!


 回到顶部
总数 12 1 2 下一页