Foxtable(狐表)用户栏目专家坐堂 → [讨论] 请教关于在 datacolchanged 中进行列间计算的顺序问题?


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

主题:[讨论] 请教关于在 datacolchanged 中进行列间计算的顺序问题?

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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
[讨论] 请教关于在 datacolchanged 中进行列间计算的顺序问题?  发帖心情 Post By:2009/7/23 0:25:00 [显示全部帖子]

例如:表A有10列,列为为1、2、3、4、5、6、7、8、9、10(不为合规则,但为说明方便)

其中:第4列根据1、2、3列计算,

        第5列根据6、7列计算 

        第8列根据1、2、3、4列计算

        第9列根据5、8列计算

        第10列根据6、9列计算

这样能用Select Case并排写代码吗?如:

select case e.datacol.name
  case 1,2,3
  e.datarow(4) = 代码
  case 6,7
  e.datarow(5) = 代码
  case 1,2,3,4
  e.datarow(8) = 代码
  case 5,8
  e.datarow(9) = 代码
  case 6,9
  e.datarow(10) = 代码
end select

这几个  case  的顺序能不能颠倒一下?


如果用if  ,能这样写吗?

if e.datacol.name = 1 or e.datacol.name = 2 or e.datacol.name = 3 then
   e.datarow(4) = 代码
elseif  e.datacol.name = 6 or e.datacol.name = 7 then
   e.datarow(5) = 代码
elseif  e.datacol.name = 1 or e.datacol.name = 2 or e.datacol.name = 3 or e.datacol.name = 4 then
   e.datarow(8) = 代码
elseif  e.datacol.name = 5 or e.datacol.name = 8 then
   e.datarow(9) = 代码
else  e.datacol.name = 6 or e.datacol.name = 9 then
   e.datarow(10) = 代码
end if

说实话,我觉得这两种写法都好像不对!

因为我不明白系统是如何判断数据变化的,关键是顺序问题。

比如4是根据1、2、3计算出来的,那么case 1,2,3,4 只有在下一次从头开始运行select case 的代码时才能正确判断,计算8。但是,符合case 1,2,3,4 的,一定符合case 1,2,3,那不是第4列又重新计算了一次??


另外,第二种方法,if里面的判断,如果不用or ,用 and,那是不是指1、2、3列都发生了变化才计算代码?如果是这样,那么我先改了1、2,  3留在完成了其他行的编辑任务以后再改,那还能触发事件吗?我想是不行的吧!

请高手解释一下这里面的判断机制和顺序问题。帮助里面的例子简单了!





 

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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/7/23 8:47:00 [显示全部帖子]

这个例子很简单,不用表单!

请老大作答

因为帮助里面没说清楚啊!

这实际就是一下嵌套运算的事件触发顺序问题。


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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/7/23 9:40:00 [显示全部帖子]

这样来,效果是不是一样?

with e.datacol
if .name=1 or .name=2 or .name=3 then
  e.datarow(4)=代码
end if

if .name=4 or .name=1 or .name=2 or .name=3 then
  e.datarow(8)=代码
end if

if .name=6 or .name=7 then
  e.datarow(5)=代码
end if

if .name=6 or .name=9 then
  e.datarow(10)=代码
end if

if .name=5 or .name=8 then
  e.datarow(9)=代码
end if

end with


我想,这样子意思差不多的,但效率可能要差很多,特别是第二段以后会重复触发事件。

老大能说说这方面的经验吗?

比如:先怎样确定判断范围,再怎样分化范围??

[此贴子已经被作者于2009-7-23 9:50:44编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/7/23 10:18:00 [显示全部帖子]

给一些经验吧!

比如:先怎样确定判断范围,再怎样分化范围??


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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/7/23 10:36:00 [显示全部帖子]

有时,1、2、3、6、7列是手动输入的,那可按上面的来写代码

有时,1、2、3、6、7列是一次性填充进来的,不是一个个输入的。这样的话,我想代码中的范围判断可以简单一些,是吗?

[此贴子已经被作者于2009-7-23 10:36:49编辑过]

 回到顶部