以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]一段代码的疑惑  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=70796)

--  作者:huangfanzi
--  发布时间:2015/6/29 13:31:00
--  [求助]一段代码的疑惑
If e.DataCol.Name = "合同号"  Then
    If  e.DataRow("合同号").Length = 13 Then
        e.DataRow("合同主号") = e.DataRow("合同号").SubString(0,10)
    Else e.DataRow("合同主号") = Nothing
    End If
End If

以上代码运行正常,但原先我写的代码如下,运行结果不对:
If e.DataCol.Name = "合同号"   andalso e.DataRow("合同号").Length = 13 Then
        e.DataRow("合同主号") = e.DataRow("合同号").SubString(0,10)
    Else e.DataRow("合同主号") = Nothing
End If
上面这段代码运行后,无论在合同号这个格子内输入多少字符,即使是输入13个字符,永远执行了ELSE后的代码,按理上面二段代码是一样的,不知是哪里有差异。

--  作者:Bin
--  发布时间:2015/6/29 14:03:00
--  
不可能呢.你可以加入代码调试一下看看 
messagebox.show(e.DataCol.Name)
messagebox.show(e.DataRow("合同号").Length )
If e.DataCol.Name = "合同号"   andalso e.DataRow("合同号").Length = 13 Then
        e.DataRow("合同主号") = e.DataRow("合同号").SubString(0,10)
    Else e.DataRow("合同主号") = Nothing
End If

--  作者:yinyb36
--  发布时间:2015/6/29 14:04:00
--  

当合同主号发生变化时,也会执行你以上的代码,所以结果是else后的代码


--  作者:yinyb36
--  发布时间:2015/6/29 14:07:00
--  

你那个代码,不管哪列发生变化都会执行


--  作者:Bin
--  发布时间:2015/6/29 14:11:00
--  
4楼正解. 你改变了 合同主号 主号,又会触发一次DataColChanged .然后此时执行这段代码.就会进入Else 覆盖上次结果