以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]窗口表中新增临时列的表达式  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=60332)

--  作者:chnfo
--  发布时间:2014/11/22 20:22:00
--  [求助]窗口表中新增临时列的表达式
我在窗口A中有一个Normal表,要在表中新增三列,A、P、V。
Dim t As Table = e.Form.Controls("Table1").Table

If dt.DataCols.Contains("A") = False Then
    dt.DataCols.Add("A",Gettype(Double),"","数量")
End If

If dt.DataCols.Contains("P") = False Then
    dt.DataCols.Add("P",Gettype(Double),"","单价")
End If

If dt.DataCols.Contains("V") = False Then
    dt.DataCols.Add("V",Gettype(Double),"math.round([A] * [P] ,2)","合价")
End If

这样为什么不行呢?表达式不能直接使用math.round?
但如果直接用
If dt.DataCols.Contains("V") = False Then
    dt.DataCols.Add("V",Gettype(Double),"A*P","合价")
End If
这样又可以,咋个整法?

--  作者:chnfo
--  发布时间:2014/11/22 20:25:00
--  
不好意思,看到了,有四舍五入的帮助 

不过好象这样也不行啊

If dt.DataCols.Contains("V") = False Then
    dt.DataCols.Add("V",Gettype(Double),"Convert([A] * [P]  * 100, \'System.Int64\') / 100 ","合价")
End If

后面会被注释掉的
[此贴子已经被作者于2014-11-22 20:32:56编辑过]

--  作者:有点甜
--  发布时间:2014/11/23 9:34:00
--  

 测试没有问题啊


--  作者:chnfo
--  发布时间:2014/11/23 9:50:00
--  
 dt.DataCols.Add("V",Gettype(Double),"Convert([A] * [P]  * 100, \'System.Int64\') / 100 ","合价"

这里有一个注释符号,如果这样写,代码直接被注释掉了

--  作者:有点甜
--  发布时间:2014/11/23 9:52:00
--  
 不可能,双引号里面的单引号不是注释
--  作者:chnfo
--  发布时间:2014/11/23 11:12:00
--  
我在表达式中引入了一个全局变量
If dt.DataCols.Contains("V") = False Then
dt.DataCols.Add("V",Gettype(Double),"Convert([A] * [P]  * 10^Vars("Dot"), \'System.Int64\') / 10^Vars("Dot") ","合价")
End If

这样就报出这个错误

编译错误:没有为“Public Function Add(ColumnName As String, DataType As System.Type, MaxLength As Integer, Expression As String, Caption As String) As DataCol”的参数“Expression”指定参数。


错误代码:dt.DataCols.Add("V",Gettype(Double),"Convert([A] * [P]  * 10^Vars("Dot"), \'System.Int64\') / 10^Vars("Dot") ","合价")

是不是表达式中不能引用变量?
[此贴子已经被作者于2014-11-23 11:12:41编辑过]

--  作者:有点甜
--  发布时间:2014/11/23 11:13:00
--  
dt.DataCols.Add("V",Gettype(Double),"Convert([A] * [P]  * 10^" & Vars("Dot") & ", \'System.Int64\') / 10^" & Vars("Dot"),"合价")
--  作者:chnfo
--  发布时间:2014/11/23 11:36:00
--  
啊,一时发晕………………,谢谢
--  作者:chnfo
--  发布时间:2014/11/23 12:42:00
--  
再问:
如果表达式中的A列和P列也是在这个窗口AfterLoad事件中增加的临时列,就不能在其它的新增列中引用A和P列了吧?或者是不能使用乘方符号?

dt.DataCols.Add("V",Gettype(Double),"Convert([A] * [P]  * 10^" & Vars("Dot") & ", \'System.Int64\') / 10^" & Vars("Dot"),"合价")

因为我在执行过程中,弹出来这个错误

无法设置列"V"的表达式,原因:表达式包含不支持的运算符“^”
[此贴子已经被作者于2014-11-23 12:42:15编辑过]

--  作者:有点甜
--  发布时间:2014/11/23 14:11:00
--  

 表达式没有 10 ^ 2 这种。

 

 你计算好了以后,再加进去呗。