以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  DrawCell事件如何判断当前Cell的值是否为0?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=153819)

--  作者:蓝色理想
--  发布时间:2020/8/24 13:04:00
--  DrawCell事件如何判断当前Cell的值是否为0?

想判断一下当前单元格是否为0,若为0或者为Null,都 设置成什么都不显示

请问,如何判断当前单元格是否为0?


下面的代码报错

If e.Col.IsNumeric And e.text = 0 Then 

           e.Text = "" 

   End If




--  作者:有点蓝
--  发布时间:2020/8/24 14:09:00
--  
If e.Col.IsNumeric And e.row(e.col.name) = 0 Then 
--  作者:蓝色理想
--  发布时间:2020/8/24 16:51:00
--  
蓝版,出现这么下面错误提示

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:表,合同汇总表,DrawCell
详细错误信息:
Exception has been thrown by the target of an invocation.
Conversion from string "洛浦杭桂一中" to type \'Double\' is not valid.
Input string was not in a correct format.

--  作者:蓝色理想
--  发布时间:2020/8/24 16:52:00
--  
难道是  程序 将 string 类型的列  合同名称 和 0 进行了数学运算,发现类型无法转换?
--  作者:蓝色理想
--  发布时间:2020/8/24 17:00:00
--  
搞定了,原来是 and 会让两边的 表达式都计算一下,结果导致的错误,修改成这样就ok

If  e.Col.IsNumeric AndAlso e.Row(e.Col.name) = 0 Then
    e.Text = ""
End If

官方的说明:

AndOr,都是先计算左右两个表达式的值,然后再返回结果。
AndAlso
先计算左边表达式的值,如果计算结果为False,则直接返回False,不再计算右边表达式的值。
OrElse
先计算左边表达式的值,如果计算结果为True,则直接返回True,不再计算右边表达式的值。
所以通常用AndAlsoOrElse代替AndOr,因为效率高点。


我这里必须 是 左边成立后才能计算右边,不然 不同类型 比较时 就会出错