rdlc Lookup函数返回字节数组#Error

时间:2015-08-08 15:17:49

标签: c# bytearray rdlc lookup

我想在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 Binarylookup的文档中发现只有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()

从Lookup()中检索它
    var valueExpression = "=Convert.ToBase64String(
      Lookup(" + ProductId + ",
        Fields!Id.Value,
        Convert.FromBase64String(Fields!Content.Value),
        \"TProjExeSettings\")
    )";

但这些转换会降低报表呈现速度。你会建议更好的方法将动态数据绑定图像添加到rdlc吗?

0 个答案:

没有答案