更多的例子
示例一
员工表中有身份证号码、出生日期列,出生日期根据身份证号码计算得出。
为了自动计算出生日期,可以在员工表的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