我有一个由Windows服务和表单应用程序使用的报告。所以,我想把报告嵌入一个可供两者使用的DLL文件中。
问题是,如果我尝试在我的Windows窗体应用程序中设置ReportViewer控件的ReportEmbeddedResource属性,它将在windows窗体应用程序中搜索资源,而不是dll文件。
例如:来自Windows窗体应用程序的代码:
rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"
如何让上面的命令在我的DLL文件中查找嵌入式资源?
答案 0 :(得分:54)
这样的事情应该这样做:
Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
答案 1 :(得分:23)
答案 2 :(得分:11)
最好的办法可能是从其他程序集获取RDLC资源的流,然后将其传递给Report Viewer控件的“LoadReportDefinition”方法。
有关如何从不同程序集中的嵌入资源获取流的详细信息,请访问:Retrieving Resources with the ResourceManager Class
此外,您需要使用它的完整命名空间路径来引用嵌入式资源。
E.g。如果您的应用程序的默认名称空间为 TheApp ,并且您在名为“报告的文件夹中保留了名为” MyReport.rdlc “的报告“,报告参考电话将是: -
rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";