时段列与计算
我们知道双精度小数型的列,可以扩展为时段型。
但是这个时段型列的值,并不是真正的时段(TimeSpan),而是一个以秒为单位的数值,在使用表达式或者代码进行计算的时候,需要特别注意这一点。
示例一
下面的“用时”列是一个时段列,每分钟字数是一个表达式列,根据字数和用时,计算出每分钟字数:
在参与计算的时候,用时列会转换秒数,例如“00:2:10”,表示2分10秒,转换为秒数就是130。
所以每分钟字数列的表达式应该设置为:[字数] / [用时] * 60
示例二
时段列可以进行加减,例如下图的超出时间列是个表达式列,其表达式为: [实际用时] - [标准时间]
示例三
下图的起始时间和结束时间是日期时间型列,日期时间格式为:DateTime。
本次用时是一个双精度小数列,扩展列类型为:时段型
为了根据起始时间和结束时间,计算出本次用时,可以将该表的DataColChanged时间代码设置为:
Select
Case e.DataCol.name
Case
"起始时间","结束时间"
Dim dr
As DataRow =
e.DataRow
If dr.IsNull("起始时间")
Or dr.IsNull("结束时间")
Then
dr("本次用时")
= Nothing
Else
Dim
tp As TimeSpan
tp =
dr("结束时间") -
dr("起始时间")
dr("本次用时")
= tp.TotalSeconds()
'真正的时段型数据要转换为秒数,才能存入时段列
End
If
End
Select
示例四
下图的起始时间和计划结束时间是日期时间型列,日期时间格式为:DateTime。
计划用时是一个双精度小数列,扩展列类型为:时段型
为了根据起始时间和计划用时,算出计划结束时间,可以将该表的DataColChanged时间代码设置为:
Select
Case e.DataCol.name
Case
"起始时间","计划用时"
Dim dr
As DataRow =
e.DataRow
If dr.IsNull("起始时间")
Or dr.IsNull("计划用时")
Then
dr("计划结束时间")
= Nothing
Else
Dim
dt As Date
= dr("起始时间")
dr("计划结束时间")
= dt.AddSeconds(dr("计划用时"))
'注意时段型列是以秒为单位参与计算的
End
If
End
Select