以文本方式查看主题

-  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=110752)

--  作者:61623823
--  发布时间:2017/12/8 17:08:00
--  [求助]表达式错误,无法调用
调用的目标发生了异常。

.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.10.26.1图片点击可在新窗口打开查看
错误所在事件:表,订单明细,DataColChanged
详细错误信息:
调用的目标发生了异常。
列“金额”为只读。

(发不了图片)


--  作者:有点甜
--  发布时间:2017/12/8 17:09:00
--  

把金额列改成数据列

 

http://www.foxtable.com/webhelp/scr/2494.htm

 


--  作者:61623823
--  发布时间:2017/12/9 10:40:00
--  回复:(61623823)[求助]表达式错误,无法调用
我的表达式为:
长|宽|面积|单位|数量|单价|金额|备注
现在面积和金额为表达式列,面积的公式为:IIF([单位] = \'平方\',[规格_长] * [规格_宽],null)金额的公式为:IIF([单位] = \'平方\',[规格_长] * [规格_宽],IIF([单位] = \'米\' or [单位] = \'厘米\',[规格_长],1)) * [数量] * [单价],
计算面积的时候都没有出现上面的情况,为什么计算金额的时候会出现上面的情况,我把金额改成数据列后,它就只计算:数量*单价的值,不懂,求教!

--  作者:有点蓝
--  发布时间:2017/12/9 11:09:00
--  
如果是写代码计算的,必须把金额改成数据列

把完整的出错事件代码贴出来看看,错误所在事件:表,订单明细,DataColChanged

--  作者:61623823
--  发布时间:2017/12/10 10:38:00
--  回复:(有点蓝)如果是写代码计算的,必须把金额改成...
我把表达式列改成数据列后,得到的只是数量和单价的积,本来我是用一个IIF函数做的,为什么面积是一个表达式列,不会出现这个情况,面积也用了一个IIF函数,只不过金额是一个IIF函数嵌套



我的表为:
        长|宽|面积|单位|数量|单价|金额|备注        
        面积 在单位为平方的时候,等于长*宽,否则为零,,,
        金额 在单位为平方的时候,等于面积*数量*单价,
                单位为长度的时候,应该等于长*数量*单价,
                其他就为数量*单价
       现在面积和金额为表达式列,面积的公式为:IIF([单位] = \'平方\',[长] * [宽],null)金额的公式为:IIF([单位] = \'平方\',[长] * [宽],IIF([单位] = \'米\' or [单位] = \'厘米\',[长],1)) * [数量] * [单价],
计算面积的时候都没有出现上面的情况,为什么计算金额的时候会出现上面的情况,我把金额改成数据列后,它就只计算:数量*单价的值,不懂,求教!


最先出现的情况为:
调用的目标发生了异常。

.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.10.26.1图片点击可在新窗口打开查看
错误所在事件:表,订单明细,DataColChanged
详细错误信息:
调用的目标发生了异常。
列“金额”为只读。


为什么列“面积"没出现只为只读的情况

[此贴子已经被作者于2017/12/10 10:46:25编辑过]

--  作者:有点甜
--  发布时间:2017/12/10 15:10:00
--  

1、改成数据列;

 

2、datacolchanged事件写代码计算

 

Select e.DataCol.name
    Case "单位", "长", "宽", "数量"
        If e.DataRow("单位") = "平方" Then
            e.DataRow("金额") = e.DataRow("长") * e.DataRow("宽") * e.DataRow("数量") * e.DataRow("单价")
        ElseIf e.DataRow("单位") = "米" OrElse e.DataRow("单位") = "厘米" Then
            e.DataRow("金额") = e.DataRow("长")  * e.DataRow("数量") * e.DataRow("单价")
        End If
End Select