我想在rdlc报告的页脚中动态地从数据库加载一组数据绑定图像。
我有一个ProductDataSource
填充数据库:
Id of integer
ProductImage of byte[]
并制作适当的<Image> </Image>
节点并将其添加到页脚节点,如:
valueExpression = "=Lookup(" + ProductId +", Fields!Id.Value, Fields.ProductImage.Value, \"Products\")"
imageNode("Value").Value = valueExpression ;
imageNode("MIMEType").Value ="image/png"; //for exp. all images have .png extension
footerNode.Add(imageNode);
但图片无法加载,当我将查找表达式放入文本框时,只需获取#Error
。
我从First function接受Variant or Binary
和lookup的文档中发现只有Variant为 result_expression ,因此将Lookup
替换为First
它效果很好:
valueExpression = First(Fields.ProductImage.Value, "Products")
同时找出 Fields.ProductImage.Value(0)获取数组的第一个字节
Lookup(Fileds!ProductId.Value, Fields!Id.Value, Fields.ProductImage.Value(0), "Products")
为什么查找不能返回Byte数组,或者换句话说,Variant是动态数据类型(Of Object),那么为什么它不能将字节数组转换为Variant?
最后在尝试失败之后,我解决了这个问题:将字节数组转换为Base64String,反之亦然,以Convert.ToBase64String()
和Convert.FromBase64String()
var valueExpression = "=Convert.ToBase64String(
Lookup(" + ProductId + ",
Fields!Id.Value,
Convert.FromBase64String(Fields!Content.Value),
\"TProjExeSettings\")
)";
但这些转换会降低报表呈现速度。你会建议更好的方法将动态数据绑定图像添加到rdlc吗?