以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]DATACOLCHANGED  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2680)

--  作者:狐哥
--  发布时间:2009/5/4 11:31:00
--  [求助]DATACOLCHANGED
有没有加截表完成之前不触发DATACOLCHANGED的函数

比如:
表A为提取表B后台数具
表A的DATACOLCHANGED有好多公式,但我想在表A加载数具完成之前不触发列公式,有此函数吗.
--  作者:cpayinyuan
--  发布时间:2009/5/4 12:06:00
--  
以下是引用狐哥在2009-5-4 11:31:00的发言:
有没有加截表完成之前不触发DATACOLCHANGED的函数

比如:
表A为提取表B后台数具
表A的DATACOLCHANGED有好多公式,但我想在表A加载数具完成之前不触发列公式,有此函数吗.

   我也有同样的需求!
   现在的狐表中有手工强制执行DatacolChanged事件的方法(RaiseDataColChanged),好像没有暂停执行DatacolChanged事件的方法!
   在绝大多数时候,列的数值的改变需要自动激发DatacolChanged事件,以实现相应的计算或操作.但在某些特殊时候,需要暂停执行某列的DatacolChanged事件,等到达到一定条件后再执行DatacolChanged事件.所以强烈建议提供一个这样的方法!

[此贴子已经被作者于2009-5-4 12:08:20编辑过]

--  作者:mr725
--  发布时间:2009/5/4 12:34:00
--  
增加一列作为条件来判断是否执行datacolchanged事件不知是否可行?比如该判断列为空时不执行,需要执行时,给该判断列赋值来触发需要执行datacolchanged事件的列,不知可否?只是动作多一点。
--  作者:cpayinyuan
--  发布时间:2009/5/4 12:43:00
--  
以下是引用mr725在2009-5-4 12:34:00的发言:
增加一列作为条件来判断是否执行datacolchanged事件不知是否可行?比如该判断列为空时不执行,需要执行时,给该判断列赋值来触发需要执行datacolchanged事件的列,不知可否?只是动作多一点。

    目前的狐表中肯定不行.目前的系统中没有暂停执行该事件的方法,更不允许用代码动态增加或减少列事件,所以,你的想法很好,但在目前的狐表中没有办法执行.
    既然有这个需求,所以,还是希望贺老师增加一个暂停执行列事件的方法!


--  作者:狐哥
--  发布时间:2009/5/4 13:31:00
--  
以下是引用mr725在2009-5-4 12:34:00的发言:
增加一列作为条件来判断是否执行datacolchanged事件不知是否可行?比如该判断列为空时不执行,需要执行时,给该判断列赋值来触发需要执行datacolchanged事件的列,不知可否?只是动作多一点。


还是不好搞,太麻烦了,要利用按钮.
还是希望贺老师增加一个暂停执行列事件的方法!
[此贴子已经被作者于2009-5-4 14:14:19编辑过]

--  作者:cpayinyuan
--  发布时间:2009/5/4 15:06:00
--  
    增加这样一个方法,可以减少不必要的计算,提高系统的效率.若没有这个方法,会造成重复执行许多不必要的计算,造成系统效率下降.
   举个简单的例子吧,假如一个工资表中有52列(全部是数据列,不用表达式列),分别为姓名,工资1,工资2,工资3,……工资50,工资合计。假设运算公式为:工资合计=工资1+工资2+工资3+,……+工资50。在目前的狐表中,需要对这50个列设置同样的DatacolChanged事件(计算工资合计)。
  假如在新增一行工资数据的时候,我们不直接编辑表,窗口中的输入框也不直接绑定表,而是通过窗口的输入框及全局变量一次性写入一人的全部工资项目(注意是先在窗口中填写50个工资项目的值,然后再一次性写入表),在目前的狐表中,每写入一个字段,就执行一次DatacolChanged事件,换句话说,每导入一个人的工资数据,就重复执行50次的一模一样的DatacolChanged事件。
    其实大家都能看出来,在这种情况下,重复执行50次相同的事件完全没有必要。而且一个人的工资数据是在窗口中输入而且一次性导入表中,中间的计算结果也没有任何意义。效率比较高的做法是在从全局变量写入表中的时候先暂停执行DatacolChanged事件,等50个字段写入完成后,只要执行一次某一列的Datacolchanged事件即可。
    在实际应用中,计算公式比这复杂得多,可能有加减乘除、括号、甚至还有函数,对系统的运行效率的影响也非常明显。为了提高系统的运行效率,所以,再次强烈建议贺老师增加暂停执行DatacolChanged事件的方法!
[此贴子已经被作者于2009-5-4 15:08:55编辑过]

--  作者:mr725
--  发布时间:2009/5/4 15:14:00
--  
以下是引用狐哥在2009-5-4 13:31:00的发言:
还是希望贺老师增加一个暂停执行列事件的方法!
[此贴子已经被作者于2009-5-4 14:14:19编辑过]

即使有这个暂停执行的方法,那么什么时候来打开执行呢?????


--  作者:cpayinyuan
--  发布时间:2009/5/4 15:15:00
--  
以下是引用mr725在2009-5-4 15:14:00的发言:

即使有这个暂停执行的方法,那么什么时候来打开执行呢?????

这个问题简单,有暂停,就必须有启用,这两个是配对的,否则根本无法使用。


--  作者:mr725
--  发布时间:2009/5/4 15:21:00
--  
以下是引用cpayinyuan在2009-5-4 15:15:00的发言:

这个问题简单,有暂停,就必须有启用,这两个是配对的,否则根本无法使用。

这么说,只是对设计者使用的?


--  作者:don
--  发布时间:2009/5/4 15:23:00
--  
1.DataColChanged:

if vars("开关") = "开" then
   原来的DataColChanged代码
End if

2.开启:
 vars("开关") = "开"

3.关闭:
 vars("开关") = "关"