时段列与计算

我们知道双精度小数型的列,可以扩展为时段型
但是这个时段型列的值,并不是真正的时段(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


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