动态设置 RDLC 报告中的图像源
Posted
技术标签:
【中文标题】动态设置 RDLC 报告中的图像源【英文标题】:Setting image source in RDLC report dynamically 【发布时间】:2011-07-24 05:19:25 【问题描述】:我正在使用与 Visual Studio 2010 捆绑在一起的客户端报告功能。我定义了一个 RDLC 文件,目前在报告顶部带有用于品牌推广的嵌入图像。图像是用户公司的标志。它与报告数据无关......它只是一个标题。
我希望能够打破对嵌入图像的依赖,因为我开始不得不扩展应用程序。相反,我希望能够动态设置图像。不幸的是,似乎没有任何参数类型支持这一点。
我已经研究过将源从嵌入切换到外部,并且可能会在程序启动时发出徽标的图像文件(徽标作为资源嵌入到单独的程序集中),然后将其称为通用名称源文件。我不确定我有多喜欢这个选项,因为它似乎是一个黑客。在测试显式设置的路径图像时,我也会遇到错误,实际上是说对象未设置为实例。例如,我什至尝试将其设置为 D:\test.jpg,并在设计时收到了该错误...所以我更不愿意尝试此选项。
我还查看了从 RDLC 文件中调用引用程序集中的类,但我似乎无法让它工作。看起来我可以引用一个程序集,然后通过一个名为 Code 的特殊对象进行调用。因为我的类是静态的,所以应该是 Code.className.method,但这似乎不起作用。
我也考虑过将标题拆分为子报表,但我仍然认为我没有解决我的依赖问题。它仍然需要相同数量的维护。
我应该提到我使用对象作为我的数据源。我应该选择什么?我错过了什么明显的东西吗?
【问题讨论】:
【参考方案1】:由于对此事没有其他(或任何!)意见,我已经向前推进并提出了一个可行的解决方案。
我选择创建徽标的按需文件,将其存储在临时位置。如果该文件不存在,我将即时创建它。如果确实存在,我只是在引用确实存在的图像。
在 RDLC 报告中,我创建了一个名为 Path 的文本类型参数。接下来,在图像的属性中,我将徽标图像从嵌入更改为外部,并将“使用此图像”设置为参数:[@Path]。
然后,在代码中,我将文件路径作为 Path 参数传递。但是我之前出错的地方是路径必须是 URL,并且我一直试图传递磁盘上的位置。因此,该部分应如下所示:
ReportParameter paramLogo = new ReportParameter();
paramLogo.Name = "Path";
paramLogo.Values.Add(@"file:///C:\Users\Mike\AppData\Local\Temp\Logo.png");
reportViewer.LocalReport.SetParameters(paramLogo);
我会说 MSDN 文档可能会更好一些。值得称赞的是,有许多关于如何在更高层次上完成某事的详细文件。这article 帮助了。它清楚地表明我需要一个指向路径的 URL,但是直接在库中检查该属性会更容易。然而,找到较低级别的文档更难,也更没有成效。这是报告图像对象的article。设置感兴趣的属性的机会不多。
【讨论】:
+1 感谢您清楚而全面地回答您自己的问题,我已经使用了您的方法,它就像一个魅力。这是一个很难获得好的信息的领域。 不适合我。使用report.Render直接打印不显示图片。 我使用图像源“数据库”和 MIME 类型图像/PNG 使其工作。然后我在其中一个数据源字段中将图像作为 byte[] 传递。 @dave 不错!我正在使用服务层,因此我将针对对象而不是数据库,但最好知道如何直接进行。 那个“file:///”部分没有放在文档中。很难找到!【参考方案2】:我遇到了同样的问题,但是接受的解决方案对我来说并不完全有效。事实证明,除了提供 URI 格式的路径并将 Image.Value 设置为 =Parameters!ReportLogo.Value
之外,我还需要将 EnableExternalImages 设置为 true。
report.EnableExternalImages = true;
ReportParameter[] parameters = new ReportParameter[3];
...
Uri pathAsUri = new Uri(_info.LogoPath);
parameters[2] = new ReportParameter("ReportLogo", pathAsUri.AbsoluteUri);
report.SetParameters(parameters);
【讨论】:
以上是关于动态设置 RDLC 报告中的图像源的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 窗体应用程序的 rdlc 报告中显示数据库中的图像