Foxtable(狐表)用户栏目专家坐堂 → 建议:建议把DatacolChanged事件变得智能一些!


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

主题:建议:建议把DatacolChanged事件变得智能一些!

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


加好友 发短信
等级:婴狐 帖子:82 积分:1202 威望:0 精华:0 注册:2008/9/1 17:51:00
  发帖心情 Post By:2009/6/14 10:22:00 [显示全部帖子]

我理解楼主的意思,因为foxtable只有表事件,没有列事件,这可能是为了减低复杂程度。表的任何列发生改变都必须通过表事件来处理,而表事件是通过判断来确定变化的列;而列事件只是在该列的发生变化时才触发列事件。在有些场合代码写在列事件中比在表事件中执行效率要好一些。如果有必要,老六是否考虑增加一个列事件?

[此贴子已经被作者于2009-6-14 10:23:20编辑过]

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


加好友 发短信
等级:婴狐 帖子:82 积分:1202 威望:0 精华:0 注册:2008/9/1 17:51:00
  发帖心情 Post By:2009/6/15 11:53:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-6-14 10:31:00的发言:


呵呵,我也考虑过列事件,但是决大多数时候,列事件只是将代码搞得更为复杂,例如金额由数量、单价、折扣计算得出,那么同样的代码要设置在数量、单价、折扣三列的事件中,显然用表事件更为合理:

Select e.DataCol.Name
   Case "数量","单价","金额"
       e.DataRow("金额") = .....
   Case  "列1","列2"
      e.DataRow("列3") = ...
   Case  "例5"
      e.DataRow.Locked = True
End Select

这样不仅条理清晰,而且便于维护,这也是为什么最初的针对列的计算代码被删除的原因。

[此贴子已经被作者于2009-6-14 10:34:26编辑过]

     你举的这个多列计算的例子确实是用表事件比较方便。但是,当某一列数据发生改变时,需要对数据表、数据列进行比较复杂的处理时,用列事件来处理是比较合适的(就像易表的操作公式一样),虽然系统提供了DataColChanged、PrepareEditValidateEdit、AfterEdit等表事件,但执行效率不如列事件高,并且必须在事件中判断变化的列。例如用PrepareEdit表事件动态设置列表项目,当每次进入该单元格的时侯即便是列表项目没有变化都要触发执行一次事件代码,在这种情况下在列事件中动态设置项目列表的代码要合适一些。
    我觉得表事件和列事件有时是不能互相取代的,两者共存,各取所需,这也是目前编程比较通行的做法。完全用表事件代替列事件,把表事件搞得太多太复杂了,这对于初学者来说是不利的。另外,表事件比列事件触发执行的频率要高得多,能在列事件中处理的还是应该尽量放在列事件中。事件驱动的程序追求的就是把代码放在不同的事件中来执行,以便于提高执行效率。仅供老六参考!

[此贴子已经被作者于2009-6-15 14:44:13编辑过]

 回到顶部