以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]日期加减的特殊需要,请大哥们指点.  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=1334)

--  作者:菜鸟foxtable
--  发布时间:2008/12/6 16:24:00
--  [求助]日期加减的特殊需要,请大哥们指点.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:日期加减.table


If e.DataCol.name = "结账" Then
    If e.NewValue = True Then
        If e.DataRow("停止日期") <> Nothing Then
          e.datarow("日期差")= Format(e.datarow("停止日期"), "dd") - Format(e.datarow("开始日期"), "dd")
        e.DataRow.Locked = True
Else
    e.DataRow("停止日期") = (today)
  e.datarow("日期差")= Format(e.datarow("停止日期"), "dd") - Format(e.datarow("开始日期"), "dd")
e.DataRow.Locked = True
        End If
    End If
End If


10点前则按上面公式...
能否实现在特定时间填写停止日期或结账时:::比如早上10点后
e.datarow("日期差")= Format(e.datarow("停止日期"), "dd") - Format(e.datarow("开始日期"), "dd")+1


请大哥们指点...
[此贴子已经被作者于2008-12-6 21:32:20编辑过]

--  作者:gdtgl
--  发布时间:2008/12/6 17:32:00
--  

增加if条件:

Dim sj As Date = date.now
If e.DataCol.name = "结账" Then
    If e.NewValue = True Then
        If e.DataRow("停止日期") <> Nothing Then          
           if sj.Hour -10 > 0 then
              e.datarow("日期差")= Format(e.datarow("停止日期"), "dd") - Format(e.datarow("开始日期"), "dd") +1
              e.DataRow.Locked = True
          else
             e.datarow("日期差")= Format(e.datarow("停止日期"), "dd") - Format(e.datarow("开始日期"), "dd")
             e.DataRow.Locked = True
          end if
Else
    e.DataRow("停止日期") = (today)
    e.datarow("日期差")= Format(e.datarow("停止日期"), "dd") - Format(e.datarow("开始日期"), "dd")
    e.DataRow.Locked = True
        End If
    End If
End If


--  作者:don
--  发布时间:2008/12/6 18:19:00
--  
If e.DataCol.name = "结账" Then
      dim dr as datarow = e.DataRow
      Dim h As integer= date.now.hour
   
      If dr("结账") = True Then
            If dr("开始日期") is Nothing Then
                  MessageBox.Show("请输入『开始日期』!", "提示")
                  dr("结账") = False
            Else
                   If dr("停止日期") is Nothing Then                          
                         dr("停止日期") = today           
                   End If
                   dr("日期差")= (dr("停止日期")-dr("开始日期")).days+iif(h >10,1,0) 
                   dr.Locked = True
            End If
       End If
End If
[此贴子已经被作者于2008-12-6 18:32:34编辑过]

--  作者:菜鸟foxtable
--  发布时间:2008/12/6 21:08:00
--  
图片点击可在新窗口打开查看谢谢大哥们指点......
图片点击可在新窗口打开查看学习让我感到快乐....
图片点击可在新窗口打开查看论坛让我感到温暖....



don大哥的代码虽然不会报错,但是有一个问题.
如果停止日期不为空,且当时停止的时间是10点前,
而当前结账时间是10点后,代码无法判断此行导致计算不正确.

gdtgl兄弟的代码经验证,如果开始日期为空,系统报错...其他问题同上.

不知这样修改行不行?开始日期在新建行时设为自动填写当前日期,所以不可能为空

If e.DataCol.name = "结账" Then
      dim dr as datarow = e.DataRow
      Dim h As integer= date.now.hour
   
      If dr("结账") = True Then
                   If dr("停止日期") is Nothing Then                          
                         dr("停止日期") = today           
                      dr("日期差")= (dr("停止日期")-dr("开始日期")).days+iif(h >10,1,0) 
                   dr.Locked = True
            End If
       End If
End If


在AfterEdit里加入代码

If e.Col.name = "停止日期" Then
    dim dr as row = e.Row
    dim h As integer= date.now.hour
    dr("日期差")= (dr("停止日期")-dr("开始日期")).days+iif(h >10,1,0)
End If

[此贴子已经被作者于2008-12-6 22:05:02编辑过]

--  作者:菜鸟foxtable
--  发布时间:2008/12/6 22:06:00
--  
图片点击可在新窗口打开查看哈哈,经验证,已经有停止日期的行不能锁定...其他正常..

前段代码插入
Else
    If dr("停止日期") isNot Nothing Then
    dr.Locked = True
End If
搞定.
[此贴子已经被作者于2008-12-6 22:15:24编辑过]