42

我有一个 Windows 服务和表单应用程序使用的报告。因此,我想将报告嵌入到一个可供两者使用的 DLL 文件中。

问题是,如果我尝试在我的 Windows 窗体应用程序中设置 ReportViewer 控件的 ReportEmbeddedResource 属性,它将在 Windows 窗体应用程序中搜索资源,而不是 dll 文件。

例如:来自 windows 窗体应用程序的代码:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

如何使上述命令在我的 DLL 文件中查找嵌入式资源?

4

3 回答 3

56

这样的事情应该这样做:

Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
于 2008-12-11T02:20:43.273 回答
23

只需使用程序集的完整命名空间,然后是文件夹名称,然后是文件名:

rv.LocalReport.ReportEmbeddedResource = 
    "My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc";

然后确保使用属性窗格将报告文件设置为嵌入式资源。

于 2010-07-26T10:29:45.377 回答
12

最好的办法可能是从另一个程序集获取到 RDLC 资源的流,然后将其传递给 Report Viewer 控件的“LoadReportDefinition”方法。

可以在此处找到有关如何从不同程序集中的嵌入式资源获取流的详细信息:使用 ResourceManager 类检索资源

此外,您将需要使用它的完整命名空间路径来引用嵌入式资源。

例如,如果您有一个默认命名空间为TheApp的应用程序,并且您在名为“ Reports ”的文件夹中保存了一个名为“ MyReport.rdlc ”的报告,则报告引用调用将是:-

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";
于 2008-11-04T13:11:40.470 回答