CurrentChanged

选择不同数据行后执行,也就是Current属性发生变化后执行。

e参数属性: 

Table: 引发事件的Table
 
本事件和PositionChanged有些相似,但是有本质区别,例如选定第二行,然后排序数据,由于排序后输入焦点还在第二行,Position属性没有发生变化,所以PositionChanged不会触发,但是排序之后,第二行可能已经不是排序之前的第二行了,从而导致Current属性发生变化,因此可能会触发CurrentChanged事件。

示例一

假定我正在订单表操作,我们希望在订单表中选定一行时,客户表的光标能够自动定位到该客户,这样我一旦从订单表回到客户表,即可看到刚刚所选订单的客户资料。
为此我们在CurrentChanged事件中设置如下代码: 

If e.Table.Current Is Nothing Then '如果Current为Nothing
    Return '则返回
End
If

Dim
wz As Integer
Dim
dr As DataRow
dr = DataTables("客户").Find("[客户ID] = '" & e.Table.Current("客户ID") & "'")
If
dr IsNot Nothing Then
    wz = Tables("客户").FindRow(dr)
    If wz >= 0 Then
        Tables
("客户").Position = wz
    End If
End
If

这种在不同表之间联动的技巧应该掌握,也许你觉得通过关联,不就可以在订单表中以关联表的形式显示客户信息吗?
但是:
1、有的时候我们并不希望建立太多的关联。
2、即使建立了关联,我们也可能关闭了Foxtable的双向关联特性,这样就无法以关联表的形式查看父表数据了。

示例二

选择某一行的时候,我们有时会希望根据该行的状态给使用者一些提示。
例如你正在使用一个送水系统,其中有一列为“剩余桶数”,你希望选择某一行时,能够根据剩余桶数给接线员一些提示。
为此我们在CurrentChanged事件中设置如下代码: 

If e.Table.Current Is Nothing Then '如果Current为Nothing
    StatusBar.Message1 = ""
Else

    Dim
Val As integer = e.Table.Current("剩余桶数")
    If
Val = 0 Then
        StatusBar.Message1 =
"已经全部送完, 无水可送!"
    ElseIf
Val = 1 Then
        StatusBar.Message1 =
"最后一桶,请立即提示客户订水。"
    Elseif
Val < 3 Then
        StatusBar.Message1 = "剩余" & Val & "桶水" & ", 请适当提示客户该续订了。"

    Else

        StatusBar.Message1 = "剩余" & Val & "桶水"

    End
if
End If

注意事项

如果筛选后,表中没有符合条件的行,或者在汇总模式下,选择分组行,此时表的Current返回Nothing,因为此时并不存在当前行,通过Current来引用数据会出错。
所以在CurrentChanged事件中,一定要判断Current是否为Nothing,再执行相应的代码:

If e.Table.Current Is Nothing Then '如果Current为Nothing
    '没有选定行时执行的代码
Else
    '有选定行时执行的代码
End If


本页地址:http://www.foxtable.com/webhelp/topics/0641.htm