Foxtable(狐表)用户栏目专家坐堂 → 这种情况怎么处理?(DataRowAdded事件的问题)


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

主题:这种情况怎么处理?(DataRowAdded事件的问题)

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
这种情况怎么处理?(DataRowAdded事件的问题)  发帖心情 Post By:2009/11/2 15:41:00 [显示全部帖子]

项目中是这样的:根据目录树生成table,如果在table中增加行,自动给相关的字段写上目录树项目内容。这样,新增加的行以后也就可以跟目录树建立关联了。
现在有个问题,点击目录树、生成table时,DataRowAdded事件总是报错。我简单做了个例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目15.table


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 15:45:00 [显示全部帖子]

有个奇怪的现象需要说明一下:同样在DataRowAdded中设置了事件代码,fill生成table时,有时报错,有时不报错,实在找不到原因在哪?
为什么在用fill加载数据时也要执行DataRowAdded事件呢?

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:01:00 [显示全部帖子]

我也知道可能是因为在Fill前、字段名称不存在导致的。但为什么这个例子没做任何判断却能正常通过?既然这个代码能通过,说明字段就是存在的:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目15.table

请老六解释一下原因,我百思不得其解。。
[此贴子已经被作者于2009-11-2 16:02:01编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:05:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-11-2 16:04:00的发言:
能理解的,一个写一个读嘛。

晕,一楼的例子明明是说“字段A”不存在才导致的错误嘛。但4楼的例子却表明,它事实上是存在的。
而且,同样的DataRowAdded事件代码,不同级别的目录树项目打开时,有的正常,有的提示错误。
很想弄清楚这里面的流程,避免以后再出错。

可以看看这个窗口里的事件,只要全局变量为“价格体系”时就出错,其它就正常。而事件代码都是一样的:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:1.rar

[此贴子已经被作者于2009-11-2 16:15:30编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:21:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-11-2 16:14:00的发言:

写要触发一系列的事件,读只是简单的返回值。

建议fill时,不要执行DataRowAdded事件(因为这并不是真正意义上的增加行,只是加载而已)。
用RowState也无法判断,都是Added。


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:24:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-11-2 16:14:00的发言:
写要触发一系列的事件,必须在表已经完全生成,相关准备工作已经完成才行。

请再看看6楼的例子,为什么唯独当全局变量为“价格体系”时就出错,其它正常。
也就是说,“区域”和“媒体名称”可以正常写,写到“起”时,就提示字段不存在了。


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:34:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-11-2 16:29:00的发言:
在Fill的时候,不执行DataRowAdded事件算了。

这样最好了。fill只是加载,本身并没有新增行,不执行DataRowAdded事件是理所应当的,而且还能提高加载效率。
这样也不会出现6楼这样莫名其妙的问题了(前3列都不报错,反而提示缺少第4列。还是糊涂。。。)


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:44:00 [显示全部帖子]

按照3楼的方法,我把DataRowAdded事件改为:

Dim txt() as String = Forms("选择维护窗口").Controls("Label4").Text.TrimStart("【").TrimEnd("】").Split("-")
Dim r as DataRow = e.DataRow
r("区域") = Trim(txt(0))
r("媒体名称") = Trim(txt(1))
If e.DataTable.Datacols.ConTains("起") Then
    r("起") = Date.Today
    r("止") = Date.Today
End If

单击第一个节点时,正常显示了。再换到其它节点时,却出了这样的错误:

图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看

按说,第一次显示正常后,窗口table的表结构已经建立了。再次Fill时,为什么还出错呢?

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19403 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/11/2 16:54:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-11-2 16:49:00的发言:
等我关闭Fill时执行DataRowAdded事件再说吧.

或者自己先用一个全局变量做标记,Fill之前将其设为False,Fill之后将其设为True,DataRowAdded则判断其值是否为True再决定是否执行。

好的,我先这样对付一下。
谢谢!


 回到顶部