详解RaiseDataColChanged

在进一步学习之前,有必要详细介绍一下RaiseDataColChanged方法。
这是DataCol的一个方法,用于强行触发该列的DataColChanged事件。

语法

RaiseDataColChanged()

RaiseDataColChanged(DataRow)

RaiseDataColChanged(Filter)

DataRow:可选参数,单单针对此行触发DataColChanged事件。
Filter:  可选参数,一个条件表达式,针对符合此条件的行触发DataColChanged事件。

如果没有给RaiseDataColChanged方法指定参数,则针对所有行触发DataColChanged事件。

示例

例如年龄列由出生日期计算得出,我们将DataColChanged事件设为:

If e.DataCol.Name = "出生日期" Then
    If
e.DataRow.IsNull("出生日期") Then '如果没有输入出生日期
       
e.DataRow("年龄") = Nothing '则清空年龄
    Else
   
    '否则计算年龄
       
e.DataRow("年龄") = Date.Today.Year - e.DataRow("出生日期").Year

    End If
End If

如果到了明年,需要重新计算年龄列,但是除非你重新输入出生日期,否则上面的代码是不会重算年龄的。
不过我们可以在AfterOpenProject事件中,设置下面的代码:

DataTables("员工").DataCols("出生日期").RaiseDataColChanged()

这样每次重新打开项目,就会强行针对出生日期列触发DataColChanged事件,效果就像你重新输入了出生日期一样 。

执行某列的RaiseDataColChanged方法,等于“欺骗”性地通知系统:这一列(被重置的列)的内容发生了变化;系统收到这个虚假通知后,开始执行DataColChanged事件代码,间接实现了重算的目的。
显然,为了重新计算年龄,只能执行出生日期列的RaiseDataColChanged方法,因为只有出生日期列的内容发生变化,年龄才会被重算。

如果并不需要每次打开项目都重算一次,那么就没有必要将上面的代码设置在AfterOpenProject事件中,可以将代码设置在一个按钮中,需要重算的时候,单击这个按钮即可。

其实我们并不需要编码去完成这样的任务,首先选择出生日期列,然后在“数据表”功能区“列相关”功能组,单击下面的“重置”按钮,即可针对出生日期列触发DataColChanged事件,计算出最新的年龄:

但是一些要求自动更新的场合,则只能使用RaiseDataColChanged方法了。


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