Navision SSRS IIF 为 TRUE 时执行 Else?

Navision SSRS the IIF executes Else when it is TRUE?

(问题重写)

我无法在页脚中显示图像。问题是,我尝试将图像从数据库转换为 Base64 字符串。如果获取图像有效,但如果数据库中的值为空值,则文本字段显示 #ERROR.

IIF(IsNothing(Fields!Company_Picture.Value), "", Convert.ToBase64String(Fields!Company_Picture.Value))

我预计在 IsNothing = True 的情况下不会执行 else 树。但是在报告中,如果没有图像,TextField 总是显示#ERROR。

解决方法是:

Public Function Base64String(ByVal img() as byte)
  if not isNothing(img) then
    Return Convert.ToBase64String(img)
  end if
  Return ""
end function

感谢大家:-)

---首先尝试解决我的问题,但它并没有完全解决主要问题---

我在报告代码部分 共享数据 1 作为对象

Public Function GetData(Num as Integer, Group as integer) as Object
if Group = 1 then
   Return Cstr(Choose(Num, Split(Cstr(Data1),Chr(177))))
End If
End 

同理设置数据

在数据库中,我将图像存储为 blob。报告中的直接显示有效。 现在我必须在报告的页脚中显示图像。我制作了一个 Table 并在一个单元格内使用隐藏的表达式将图像插入到对象中。

问题来了。我试着用

Code.SetData(IIF(IsNothing(First(Fields!CompanyPicture.Value, "DataSet_Result")) = TRUE, "", Convert.ToBase64String(Fields!CompanyPicture.Value) + Chr(177), 1)

报告现在在此表达式上崩溃,因为隐藏表达式不能为 NULL。我不明白,为什么从 IIF 执行 else 树。 IsNothing 工作正常并给我 True。

如果图像为 Null,我能做什么?

我要说的第一件事是风格问题:我永远不会检查某事是否为真。直接写 IIf(isNothing(...), "", ...).

其次,您只检查数据集中的第一个条目是否为空,而是为数据集中的每个条目调用 convert 方法。因此,例如,如果您的数据集有两个条目,其中第一个不是什么都不是,第二个是,那么在计算第二个条目的表达式时会遇到问题。

以及@Schlaagi 的回答中的评论。 IIF 总是评估 true 和 false 结果,因此除非您适当地适应它,否则它将失败。

我不知道 SetData 函数的作用,我已经有一段时间没有使用 Convert.ToBase64String 了,但看看这个函数是否有意义。

=Code.SetData(
    Convert.ToBase64String(
                            IIF(IsNothing(Fields!CompanyPicture.Value, "DataSet_Result"),
                                "",
                                Fields!CompanyPicture.Value + Chr(177))
                            )
                            , 1
            )