以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [讨论] datacolchanged 时间问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=115155)

--  作者:81538475
--  发布时间:2018/3/1 21:52:00
--  [讨论] datacolchanged 时间问题
按照帮助文档上的方法成功了,但是我希望JSSJ这一列如果是空的时候才会写入当天的日期,否则日期不变。下面的代码问题在哪里呀

If e.DataCol.Name = "已结算" Then 
    If e.NewValue = True Then 
      If e.DataRow ("结算时间") Is Nothing Then
          e.DataRow ("结算时间") = Date.Today()
          e.DataRow.Locked = True 
        Else e.DataRow.Locked = True
      End If
Else
    e.NewValue = Nothing
    
End If
End If

--  作者:chnfo
--  发布时间:2018/3/1 21:56:00
--  

If e.DataCol.Name = "已结算" Then 
      If e.DataRow ("结算时间") Is Nothing Then
          e.DataRow ("结算时间") = Date.Today()
      End If
        e.DataRow.Locked = True
End If
[此贴子已经被作者于2018/3/1 22:07:16编辑过]

--  作者:81538475
--  发布时间:2018/3/1 22:02:00
--  
以下是引用chnfo在2018/3/1 21:56:00的发言:

If e.DataCol.Name = "已结算" Then 
      If e.DataRow ("结算时间") Is Nothing Then
          e.DataRow ("结算时间") = Date.Today()
          e.DataRow.Locked = True 
        Else 
              e.DataRow.Locked = True
      End If
End If
[此贴子已经被作者于2018/3/1 21:58:51编辑过]


还是不行呀


--  作者:chnfo
--  发布时间:2018/3/1 22:08:00
--  
如果已经结算,那么结算时间这一列就赋当天日期。
如果没有结算呢?不赋值?


Select Case e.DataCol.Name
    Case "JS"
        If e.DataRow("JS") = True AndAlso e.DataRow.IsNull("JSSJ") = True  Then
            e.DataRow("JSSJ") = Date.Today()
        End If
End Select
[此贴子已经被作者于2018/3/1 22:14:15编辑过]

--  作者:81538475
--  发布时间:2018/3/1 22:10:00
--  
还是不可以的。如果 吧这个去掉的话 If e.NewValue = True 。  就不能实现 这个逻辑咧是true的时候才锁定这一行了。而且结算时间那一列也每有反应
--  作者:chnfo
--  发布时间:2018/3/1 22:16:00
--  
Select Case e.DataCol.Name
    Case "JS"
        If e.DataRow("JS") = True Then
            If  e.DataRow.IsNull("JSSJ") = True  Then
                e.DataRow("JSSJ") = Date.Today()
            End If
            e.DataRow.Locked = True
        End If
End Select

--  作者:81538475
--  发布时间:2018/3/1 22:18:00
--  
嗯没有结算就不赋值。原来的代码是这样的
If e.DataCol.Name = "JSZT" Then
    If e.NewValue = True Then
        
        e.DataRow ("JSSJ") = Date.Today()
        e.DataRow.Locked = True
        
        
    Else
        e.NewValue = Nothing
        
    End If
End If

这样会有个问题,当结算被勾选的时候,这一行就会被锁定,但是考虑到后面可能会有前面的数据修改,就需要解锁这一行,结算时间还是不变的,只是修改其他地方的数据,这样一来,按照刚才的代码,重新勾选结算之后,结算时间就又变成的修改的当天了。这就不对了。

--  作者:81538475
--  发布时间:2018/3/1 22:24:00
--  
太感谢了。原来要用  e.DataRow.IsNull("JSSJ") = True 
--  作者:chnfo
--  发布时间:2018/3/1 22:26:00
--  
那代码你不能这么整呀。

前面的数据修改的时候,你要去触发某一列的重置,让这一列的状态发生改变。
"JS"这一列的值发生改变,需要通过其它的代码来改变状态才行
   
Select Case e.DataCol.Name
    Case "JS"
        If e.DataRow("JS") = True Then
            If  e.DataRow.IsNull("JSSJ") = True  Then
                e.DataRow("JSSJ") = Date.Today()
            End If
         End If
       e.DataRow.Locked = e.DataRow("JS")
End Select
[此贴子已经被作者于2018/3/1 22:30:28编辑过]

--  作者:有点甜
--  发布时间:2018/3/1 22:30:00
--  

如果判断为空,用这样

 

If e.DataRow ("结算时间") = Nothing Then