Foxtable(狐表)用户栏目专家坐堂 → Tables("临时医嘱").RaiseCurrentChanged这个方法是什么用途?


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

主题:Tables("临时医嘱").RaiseCurrentChanged这个方法是什么用途?

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


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
Tables("临时医嘱").RaiseCurrentChanged这个方法是什么用途?  发帖心情 Post By:2011/9/11 10:57:00 [只看该作者]

 


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


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

 

强行触发事件

 

Table有两个特别的方法,分别是:

RaiseCurrentChanged: 强行触发此Table的CurrentChanged事件
RaisePositionChanged:强行触发此Table的PositionChanged事件。

 

示例

 

假定有个订单表,希望每次选择一个订单的时候,能够自动在状态栏显示此订单客户的总订单数、总订购数量,为此可以将订单表的CurrentChanged事件代码设置为:

 

Dim flt As String = "客户 = '" & Tables("订单").Current("客户") & "'"
Dim
cnt As Integer = DataTables("订单").Compute("Count([_Identify])",flt)
Dim
sum As Integer = DataTables("订单").Compute("Sum([数量])",flt)
StatusBar.Message1 =
"订单数:" & cnt & "  订购数量:" & sum

 

现在有个新的要求,希望在订单表修改客户列或者数量列内容是,能够自动刷新上面统计结果,我们可以在DataColChanged加上类似的统计代码:

 

Select Case e.DataCol.name
    Case "客户","数量"
        If e.DataRow("_Identify") = Tables("订单").Current("_Identify") '如果发生变化的是当前行
            Dim flt As String = "客户 = '" & Tables("订单").Current("客户") & "'"
            Dim cnt As Integer = DataTables("订单").Compute("Count([_Identify])",flt)
            Dim sum As Integer = DataTables("订单").Compute("Sum([数量])",flt)
            StatusBar.Message1 = "订单数:" & cnt & "  订购数量:" & sum
        End
If
End
Select

 

这样的设计没有大的问题,但是几乎同样的代码出现在两个地方,不仅代码冗余,而且不利于维护,因为如果要调整代码,就必须同时修改这两个事件的代码。

 

我们可以将DataColChanged事件代码改为:

 

Select Case e.DataCol.name
    Case "客户","数量"
        If e.DataRow("_Identify") = Tables("订单").Current("_Identify")
'如果发生变化的是当前行
           
Tables("订单").RaiseCurrentChanged() '触发订单表的CurrentChanged事件,相当于重新统计一次。
       
End If
End
Select

 

上述代码可以完成了同样的任务,但是代码精炼了很多,维护起来也方便了很多,因为统计代码只出现在CurrentChanged事件。


 回到顶部