以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]高速合并出错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=8698) |
||||
-- 作者:易服 -- 发布时间:2010/11/28 12:17:00 -- [求助]高速合并出错 首先高速导出然后初始化“申请表”,再高速合并已经导出的数据库出错。
PASSWORD:888 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2010/11/28 12:30:00 -- 根据错误提示,你应该检查“申请”表的“DataColChanged“事件代码 |
||||
-- 作者:易服 -- 发布时间:2010/11/28 13:16:00 -- 删除条件判断代码可以合并,但数据不符合逻辑时不提示。不能两全? |
||||
-- 作者:狐狸爸爸 -- 发布时间:2010/11/29 8:23:00 -- 不是不能加代码,而是你加的代码有问题。 不仅有问题,而且“申请”表的“DataColChanged“存在很多无用的代码,可以说是不堪入目。
首先这段代码有意义吗:
If e.DataCol.Name = "林种" OrElse e.DataCol.Name = "亚林种" Then
还有一个事件,这么多:
Dim dr1 As DataRow = e.DataRow
实在是有点那个了,并非每次应用,都要重新定义一个变量的,只要一个就行: Dim dr As DataRow = e.DataRow
你最大的错误在于这段,也是导致你运行出错的原因:
If CurrentTable.current("身份证号").length <> 18 Then
首先你的表已经初始化了,CurrentTable.Current可能是Nothing,当然出错,其次DataColChanged是针对DataTable的事件,你在这里使用CurrentTable.Current很不严谨,因为CurrentTable.Current表示的是选定表的选定行,并非一定就是发生变化的行,甚至可能还不是发生变化的表。而且DataColChanged输在数据修改成功后出发,你还验证个啥?
所以这一段应该删除。
有很多地方可以写代码来规范用户输入的,可以在DataColChanging事件: If e.DataCol.Name = "身份证号" AndAlso e.NewValue.Length < 18
也可以是ValidateEdit事件,这样写: If e.Col.Name = "身份证号" AndAlso e.Text.Length < 18
最后我帮你修改一下代码.
DataColChanging代码为:
Dim dr As DataRow = e.DataRow
DataColChanged事件代码:
If e.DataCol.Name = "乡名" Then
我花了差不多一个小时来回你这个帖子,说了很多,希望你能重视。 有些话说得也不中听,如果是接触狐表才几个月的用户,我是不会这么说的,但你是元老级的用户,对你的要求和期待自然不一样。 [此贴子已经被作者于2010-11-29 8:33:38编辑过]
|
||||
-- 作者:易服 -- 发布时间:2010/11/29 16:35:00 -- 高速合并的时候因为有DataColChanging代码的存在,如果有不规范的数据会弹出提示很烦人的。能不能在高速合并菜单加入代码回避验证;或者取消DataColChanging代码,在“申请表”加一按钮进行同样的逻辑检查。惭愧!只有思路不会编码 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2010/11/29 16:44:00 -- 1、那就删除DataColChanging事件代码,改用AfterEdit事件。
2、如果要继续用DataColChanging事件,那就增加一个全局变量,事件代码首先检测此变量的值,如果为True就Return即可。然后自己做一个合并按钮,合并开始前将变量的值设置为True,结束后设置为False。 [此贴子已经被作者于2010-11-29 16:48:21编辑过]
|