以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  这个代码让我想了3天没写出来,请教老师帮助。谢谢!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=85548)

--  作者:我的电脑521
--  发布时间:2016/5/27 21:04:00
--  这个代码让我想了3天没写出来,请教老师帮助。谢谢!

请教老师给写个代码:退住日期的列减去入住日期的列 等于入住天数的列,退住日期和入住日期的列属性为日期类型的列,入住天数列为整数型。


--  作者:674140303
--  发布时间:2016/5/27 23:20:00
--  

这是帮助文件中的例子,应该对你的问题有帮助,在帮助文件中搜索“更多的例子“就能找到


完成日期等于起始日期加上执行天数:

我们可以在该表的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


--  作者:Hyphen
--  发布时间:2016/5/28 9:50:00
--  
参考:http://www.foxtable.com/help/topics/0287.htm

http://www.foxtable.com/help/topics/1452.htm


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