更多的例子

示例一

员工表中有身份证号码、出生日期列,出生日期根据身份证号码计算得出。
为了自动计算出生日期,可以在员工表的DataColChanged事件中加入下面的代码:

If e.DataCol.Name = "身份证号码" Then '是身份证号码发生变化吗?
    If e.DataRow.IsNull("身份证号码") Then '身份证号码是否为空
        e.
DataRow("出生日期") = Nothing '如果为空,则清除出生日期
   
Else
   
    '否则从身份证号码列中提取出生日期
        e.
DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号码"))
    End
If
End
If

如果表中已经输入数据,那么在加入上述代码后,选择身份证号码列,然后在“数据表”功能区“列相关”功能组,单击下面的“重置”按钮:

即可计算出所有行的出生日期,今后新增数据或者修改身份证号码,出生日期可以自动计算得出,无需人工干预。

示例二

再例如下面的表格,完成日期等于起始日期加上执行天数:

我们可以在该表的DataColChanged事件中加入下面的代码:

If e.DataCol.Name = "起始日期" OrElse e.DataCol.Name = "执行天数" Then
    If
e.DataRow.IsNull("起始日期") OrElse e.DataRow.IsNull("执行天数") Then
        e.
DataRow("完成日期") = Nothing
    Else

        e.
DataRow("完成日期") = e.DataRow("起始日期").AddDays(e.DataRow("执行天数"))
   
End If
End
If

上面的代码多处使用了e.DataRow和e.DataCol,为了让代码看上去简洁一点,我们可以用变量来代替它们:

Dim dc As DataCol = e.DataCol
Dim
dr As DataRow = e.DataRow
If
dc.Name = "起始日期" OrElse dc.Name = "执行天数" Then
    If
dr.IsNull("起始日期") OrElse dr.IsNull("执行天数") Then
        dr(
"完成日期") = Nothing
    Else

        dr(
"完成日期") = dr("起始日期").AddDays(dr("执行天数"))
   
End If
End
If

采用何种编码风格,完全看个人的偏好。

示例三

上面的例子是根据开始日期和执行天数计算完成日期,如果反过来,要根据开始日期和完成日期计算执行天数,可以将DataColChanged事件代码设置为:

Select Case e.DataCol.Name
    Case
"开始日期",
"完成日期"
       
Dim dr As DataRow = e.DataRow
       
If dr.IsNull("开始日期") OrElse dr.IsNull("完成日期") Then
            dr(
"执行天数") = Nothing
       
Else
           
Dim tp As TimeSpan = dr("完成日期") - dr("开始日期")
            dr(
"执行天数") = tp.TotalDays
        End
If
End
Select

示例四

下图是一个成绩表,显然总分列是可以用表达式列来计算的,但是这次看看如何使用代码来计算总分。

在该表的DataColChanged事件中加入下面的代码即可:

Dim dr As DataRow = e.DataRow
Select
Case e.DataCol.Name
    Case "语文","数学","英语","物理","生物","地理","政治","历史"
        dr(
"总分") = dr("语文")+dr("数学")+dr("英语")+dr("物理")+dr("生物")+dr("地理")+dr("政治")+dr("历史")
End
Select

上面的例子告诉我们,如果有某一列由很多列计算得来,那么用Select Case语句来判断列名,会显得简洁很多。


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