动态设置RDLC报告中的图像源

Mik*_*e L 17 .net reporting image reporting-services

我正在使用与Visual Studio 2010捆绑在一起的客户端报告功能.我已经定义了一个RDLC文件,目前在报告的顶部有用于品牌推广的嵌入式图像.图像是用户公司的徽标.它与报告数据没有任何关系......它只是一个标题.

我希望能够打破嵌入图像的依赖性,因为我开始不得不扩展应用程序.相反,我希望能够动态设置图像.不幸的是,没有参数类型似乎支持这一点.

我已经看过将源从嵌入式切换到外部,并且可能在程序启动时发出徽标的图像文件(徽标作为资源嵌入到单独的程序集中),然后将其称为一般命名的文件.资源.我不确定我有多喜欢这个选项,因为它似乎是一个黑客.在测试显式设置路径图像时,我也会收到错误,有效地说该对象未设置为实例.例如,我甚至试图将它设置为D:\ test.jpg,并在设计时得到错误...所以我更不愿意尝试这个选项.

我还看过在RDLC文件中调用引用程序集中的类,但我似乎无法让它工作.看起来我可以引用一个程序集,然后通过一个名为Code的特殊对象进行调用.因为我的类是静态的,它应该是Code.className.method,但这似乎不起作用.

我也考虑过将标题分成子报告,但我仍然认为我没有解决我的依赖问题.它仍然需要相同的维护量.

我应该提一下,我正在使用对象作为我的数据源.我应该选择什么选择?我错过了一些明显的东西吗

Mik*_*e L 24

由于没有关于这个问题的备选(或任何!)意见,我已经进一步推进并提出了一个有效的解决方案.

我选择创建徽标的按需文件,将其存储在临时位置.如果文件不存在,我会动态创建它.如果确实存在,我只是引用确实存在的图像.

在RDLC报告中,我创建了一个名为Path of Text的参数.接下来,在Image的属性中,我将徽标图像从嵌入更改为外部,并将"使用此图像"设置为参数:[@ 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);
Run Code Online (Sandbox Code Playgroud)

我会说MSDN文档可能会好一些.值得称道的是,有许多关于如何在更高层次上完成某些事情的详细文件.这篇文章有帮助.它清楚地说我需要一个路径的URL,但是直接在库中检查该属性会更容易.但是,找到较低级别的文档更难,效果也更差.以下是Reporting Image对象的文章.没有太多机会设置感兴趣的属性.

  • +1 感谢您清楚而全面地回答了您自己的问题,我已经使用了您的方法,它的效果非常好。这是一个很难获得好的信息的领域。 (2认同)
  • 我使用图像来源'数据库'和MIME类型图像/ png使其工作.然后我将图像作为byte []传递到其中一个数据源字段中. (2认同)

小智 12

我遇到了同样的问题,但是接受的解决方案并不适合我.事实证明,除了提供URI格式的路径并将Image.Value设置为之外,我还需要将EnableExternalImages设置为true =Parameters!ReportLogo.Value.

report.EnableExternalImages = true;
ReportParameter[]  parameters = new ReportParameter[3];
...
Uri pathAsUri =  new Uri(_info.LogoPath);
parameters[2] = new ReportParameter("ReportLogo", pathAsUri.AbsoluteUri);
report.SetParameters(parameters);
Run Code Online (Sandbox Code Playgroud)