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


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

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

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


加好友 发短信
等级:五尾狐 帖子:1037 积分:7428 威望: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留在完成了其他行的编辑任务以后再改,那还能触发事件吗?我想是不行的吧!

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





 

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


加好友 发短信
等级:幼狐 帖子:147 积分:947 威望:0 精华:0 注册:2009/5/12 9:43:00
  发帖心情 Post By:2009/7/23 2:15:00 [只看该作者]

给个表简单多了!

 回到顶部
美女呀,离线,留言给我吧!
梦倩
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:60 积分:492 威望:0 精华:0 注册:2009/6/4 8:00:00
  发帖心情 Post By:2009/7/23 8:16:00 [只看该作者]

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

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


加好友 发短信
等级:五尾狐 帖子:1037 积分:7428 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/7/23 8:47:00 [只看该作者]

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

请老大作答

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

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


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/7/23 8:57:00 [只看该作者]

3楼的代码挺好的嘛

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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/7/23 9:11:00 [只看该作者]

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

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

 回到顶部
美女呀,离线,留言给我吧!
yangming
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/7/23 9:22:00 [只看该作者]

select case e.datacol.name
    case "第一列","第二列","第三列"
         e.datarow("第四列") = e.datarow("第一列")+ e.datarow("第二列") +e.datarow("第三列")
    Case "第四列"
         e.datarow("第八列") = e.datarow("第四列") *2
    Case "第六列","第七列"
         e.datarow("第五列") = e.datarow("第六列")+e.datarow("第七列")
      Case "第五列","第八列"
         e.datarow("第九列") = e.datarow("第五列")+e.datarow("第八列")
   Case "第六列","第九列"
         e.datarow("第十列") = e.datarow("第六列")+e.datarow("第九列")
end select

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


加好友 发短信
等级:五尾狐 帖子:1037 积分:7428 威望: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编辑过]

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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/7/23 10:01:00 [只看该作者]

我在6楼给的代码最好,不会重复触发。
[此贴子已经被作者于2009-7-23 10:00:49编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1037 积分:7428 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/7/23 10:18:00 [只看该作者]

给一些经验吧!

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


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