【问题标题】:ReportViewer Division by zeroReportViewer 除以零
【发布时间】:2010-09-14 13:59:59
【问题描述】:

我的报告中有一些公式,为了防止除以零,我在表达式字段中这样做:

=IIF(Fields!F1.Value 0, Fields!F2.Value/Fields!F1.Value, 0)

这通常可以正常工作,但是当 F1 和 F2 都为零时,我在报告中收到“#Error”,并收到以下警告:“文本框 'textbox196' 的值表达式包含错误:尝试除法零。”

这是为什么呢?

【问题讨论】:

    标签: reportviewer


    【解决方案1】:

    IIF() 只是一个函数,与任何函数一样,all 参数在函数被调用之前进行评估,包括Fields!F2.Value/Fields!F1.Value。换句话说,不管Fields!F1.Value <> 0 条件如何,它都会尝试除以零。

    【讨论】:

    • 啊,是的,当然,开始记住VB了。但是,这个问题有什么样的解决方案呢?据我所知,我无法输入 VBA sn-p 作为表达式,还是我错了?
    • 我不确定:VB9 (.Net 3.5) 支持新的 If() operator,其工作方式类似于基于 C 的三元运算符 (?)。 VB8 (.Net2.0) 支持内联 If/Else 构造。但我认为两者都不能与 ReportViewer 一起使用。
    • 我可能错了,但我认为这不能解释问题。当只有 F1 == 0 时,neslekkiM 的东西工作正常,但当 both 为 0 时就不行了,对吧?加上乔尔,你的除法表达式与 neslekkiM 写的不匹配——他的除数是 F1,而不是 F2。
    • 还有什么...为什么 IIF 在各地的实施方式如此不同? Exce、VB、ReportingServices、ADO 等.. 叹息..
    • =IIf(Fields!F1.Value = 0, "N/A", Fields!F2.Value / IIf(Fields!F2.Value = 0, 1, Fields!F2.Value))
    【解决方案2】:

    必须有比这更漂亮的方法,但这应该可行:

    =IIF(Fields!F1.Value <> 0, Fields!F2.Value / 
       IIF(Fields!F1.Value <> 0, Fields!F1.Value, 42), 0)
    

    【讨论】:

    • 恶心,但有效.. 为什么我不能简单地写:IF Fields!F1.Value 0 Then Fields!F2.Value / Fields!F1.Value Else 0 End If like CrystalReports。 ..我正在迁移离开..叹息。
    【解决方案3】:

    但是,你可以使用

    if Fields!F1.Value <> 0 
    then 
    Fields!F2.Value/Fields!F1.Value
    else 0
    

    这应该可行,因为如果“if”部分为假,它不会评估 then 子句。

    【讨论】:

    • 确实看到我对接受的答案所做的评论,也许现在已经改变了,但当时我不能这样写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多