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
)
(问题重写)
我无法在页脚中显示图像。问题是,我尝试将图像从数据库转换为 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
)