Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
1、对于datacolchanged事件,在手动输入数据时,是输入一个单元格的数值就执行一次事件代码,我想是这样的。
2、对于用数据填充器的 Filler 填充的数据,是不是也一样,填充一个单元格就执行一次事件代码?还是填充一行就执行一次代码? 请有经验的朋友答复一下。
我想,这个很重要的,涉及执行事件代码如何编写和执行的效率问题。
例如:
我用数据填充器的 Filler 填充进来了:第一列、第二列、第三列、第四列、第五列
我在这个表的datacolchanged事件中写了如下的代码:
Select
Case e.datacol.name
Case 第一列、第二列、第三列
代码1
Case 第四列、第五列
代码2
End
Select
如果是填充一个单元格就执行一次代码
那么我填充第一列的第一行时,要执行一次代码1
填充第二列的第一行时,也要执行一次代码1
填充第三列的第一行时,又要执行一次代码1
这样效率不是很低吗?
实际上,代码1需要第一列、第二列、第三列的值都变化了,才能组合计算出正确结果的。
谁能解释这个效率低下的问题?是我理解有误吗?
是不是整个一行的数据被填充了,才执行一次事件代码?这样的话效率要高些的。
在DataColChanging事件中,e.DataRow("列名")返回原来的值,可以和e.NewValue比较
在DataColChanged事件中,e.Dataow("列名")和e.NewValue相等,无法比较。
楼主的问题,可以用一个全局变量做开关,在事件中判断全局变量的值,为True执行,为False返回。
在DataColChanging事件中,e.DataRow("列名")返回原来的值,可以和e.NewValue比较
在DataColChanged事件中,e.Dataow("列名")和e.NewValue相等,无法比较。
楼主的问题,可以用一个全局变量做开关,在事件中判断全局变量的值,为True执行,为False返回。
我上面是就事论事,其实最好的办法还是填充完了再一次性进行计算更好。
老大的意思是:
计算代码还是写在datacolchanged 事件中,但是设置一个开关。
等数据填充完毕了以后,再打开这个开关,事件代码再一次性统一执行!
看来并不复杂啊!