我正在努力在 SSRS 中设置报告。我们的报告有些灵活,我希望根据参数动态选择封面图像。
这是我所拥有的:
在我们的报告数据库中,我设置了一个图像表。为了简单起见,我们假设我有三列:
ImageName, ImageType, and Image.
名称和类型均为 varchar,而 ImageType 为 varbinary。我已将我们计划使用的图像及其名称和关联类型上传到表中。
在我的报告中,我有一个数据源和一个数据集,用于引入上面的表格和列。
我还有一个名为“ImageName”的参数。我已将此参数设置为使用“Image”(来自上述表格)作为其值字段,并且标签字段设置为“ImageName”。
在报告本身上我有一个图像...控件?报告元素?不知道该怎么调用它,但我已经设置了一个图像。图像源设置为“数据库”,MIME 类型使用查找函数根据Parameters!ImageName.Label 参数从数据集中提取适当的图像类型 - 这部分工作很不错 - 我正在返回正确的 MIME每次都输入。
什么不起作用,但我希望应该起作用,是设置图像本身。对于“选择图像源:”下的“使用此字段”字段,我尝试了 =Parameters!ImageName.Value
但没有成功,也尝试了基于 ImageName.Label 的查找图像数据集。似乎都不起作用。
当我尝试使用参数值时,出现错误
[rsInvalidDatabaseImageProperty] The value of the ImageData property for the image 'ImageControlName' is "=Parameters!ImageName.Value", which is not a valid ImageData.
我从 lookup
方法中得到了相同的错误消息,它只是将查找代码替换为上面的Parameters!ImageName 代码。
如果我尝试检查上面的查找返回的类型,我只会收到错误。对于参数,如果我检查类型,我会得到 System.String
所以我决定将其打印出来,显然 Parameters!ImageName.Value
的值是 System.由于某种原因,字节[]
。
我可以使用 First()
函数获取要显示的图像,但我需要能够选择该图像。我想我可能需要过滤一下。 First()
的返回类型为 System.Byte[]
,这看起来很合理。我只是不明白为什么我的参数以字符串形式返回图像数据列的类型,而不是图像列本身的数据。
那么我该如何让它工作呢?过滤我的数据集是我唯一的选择吗?或者有没有办法让参数工作或获得一些函数来让我选择合适的图像?
最佳答案
错误的原因是 Parameters
与 First
返回的数据类型有关。
对于返回的Parameters
数据类型为文本类型,它不是有效的图像数据类型,因此会出现错误。
对于 First
函数,它根据表达式类型返回数据类型,并返回图像的正确数据类型并显示图像。
Per Microsoft Parameter Data Type :
A report parameter must be one of the following data types:
- Boolean. The user selects True or False from a radio button.
- DateTime. The user selects a date from a calendar control.
- Integer. The user types values in a text box.
- Float. The user types values in a text box.
- Text. The user types values in a text box.
When available values are defined for a parameter, the user chooses values from a drop-down list, even when the data type is DateTime.
Per Microsoft First function data type:
Return Type
Determined by the type of expression.
您获得过滤数据集所需的正确图像是正确的。
- 创建提供 ImageName、ImageType 和 Image 的数据集。
- 基于图像参数过滤ImageName上的数据集。
现在使用以下表达式来获取正确的图像数据。
=Fields!Image.Value
关于reporting-services - SSRS参数和图像怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34889105/