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

时间:2011-03-28 05:16:57

标签: .net image reporting-services reporting

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:20)

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

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

在RDLC报告中,我创建了一个名为Path of Text的参数。接下来,在图像的属性中,我将徽标图像从嵌入更改为外部,并将“使用此图像”设置为参数:[@ 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,但是直接在库中检查该属性会更容易。但是,找到较低级别的文档更难,效果也更差。以下是Reporting Image对象的article。没有太多机会设置感兴趣的属性。

答案 1 :(得分:11)

我遇到了同样的问题,但是接受的解决方案并不适合我。事实证明,除了提供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);