以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 求助,时间计算 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=1692) |
||||
-- 作者:hejfen -- 发布时间:2009/1/28 15:55:00 -- 求助,时间计算 五个列名:加班类型、加班起时间、加班止时间、合计加班时间、单位, 若选择加班类型为“正常工作日”,则(合计加班时间=加班止时间 - 加班起时间)单位为小时, 若加班类型选择“休息日”,(加班止时间 - 加班起时间)<=2,则(合计加班时间=加班止时间 - 加班起时间)单位为小时,(加班止时间 - 加班起时间)>2且<4,合计加班时间=0.5,单位为天,加班止时间 - 加班起时间)>4,合计加班时间=1,单位为天, 若加班类型选择“法定工作日”,(加班止时间 - 加班起时间)<=4,则合计加班时间=0.5,单位为天,(加班止时间 - 加班起时间)>4,合计加班时间=1,单位为天, 以上条件如何实现?用表达式列实现方便,还是在表属性DataColChanged实现方便?
[此贴子已经被czy于2009-1-30 0:50:58编辑过]
|
||||
-- 作者:czy -- 发布时间:2009/1/28 16:35:00 -- 如何实现请上传文件,两种方式应该用代码方便。 |
||||
-- 作者:czy -- 发布时间:2009/1/29 23:02:00 -- DataColChanged事件代码: Dim dc As DataCol = e.DataCol Dim dr As DataRow = e.DataRow Dim d1 As Date = dr("加班止时间") Dim d2 As Date = dr("加班起时间") Dim t As TimeSpan = d1 - d2 If dc.Name = "加班类型" OrElse dc.Name = "加班起时间" OrElse dc.Name = "加班止时间" Then if dr.IsNull("加班类型") OrElse dr.IsNull("加班起时间") OrElse dr.IsNull("加班止时间") Then dr("合计加班时间") = Nothing dr("单位") = Nothing Else if dr("加班类型") = "正常工作日" Then dr("合计加班时间") = t.Hours dr("单位") = "小时" End If if dr("加班类型") = "休息日" Then if t.Hours > 4 Then dr("合计加班时间") = 1 dr("单位") = "天" ElseIf t.Hours > 2 Then dr("合计加班时间") = 0.5 dr("单位") = "天" Else dr("合计加班时间") = t.Hours dr("单位") = "小时" End If End If if dr("加班类型") = "法定节假日" Then if t.Hours <= 4 Then dr("合计加班时间") = 0.5 dr("单位") = "天" Else dr("合计加班时间") = 1 dr("单位") = "天" End If End If End If End If |
||||
-- 作者:czy -- 发布时间:2009/1/30 15:02:00 -- 三楼可能理会错楼主的意思了,用下面的代码试试。 Dim dc As DataCol = e.DataCol Dim dr As DataRow = e.DataRow Dim d1 As Date = dr("加班止时间") Dim d2 As Date = dr("加班起时间") Dim t As TimeSpan = d1 - d2 If dc.Name = "加班类型" OrElse dc.Name = "加班起时间" OrElse dc.Name = "加班止时间" Then if dr.IsNull("加班类型") OrElse dr.IsNull("加班起时间") OrElse dr.IsNull("加班止时间") Then dr("合计加班时间") = Nothing dr("单位") = Nothing Else if dr("加班类型") = "正常工作日" Then dr("合计加班时间") = Math.Round(t.TotalHours,2) dr("单位") = "小时" End If if dr("加班类型") = "休息日" Then if t.TotalHours > 4 Then dr("合计加班时间") = 1 dr("单位") = "天" ElseIf t.TotalHours > 2 Then dr("合计加班时间") = 0.5 dr("单位") = "天" Else dr("合计加班时间") = Math.Round(t.TotalHours,2) dr("单位") = "小时" End If End If if dr("加班类型") = "法定节假日" Then if t.TotalHours <= 4 Then dr("合计加班时间") = 0.5 dr("单位") = "天" Else dr("合计加班时间") = 1 dr("单位") = "天" End If End If End If End If [此贴子已经被作者于2009-1-30 15:02:16编辑过]
|