显示embedded在DLL文件中的.RDLC报告

我有一个由Windows服务和表单应用程序使用的报告。 所以,我想把报告embedded到一个可以被两个使用的DLL文件中。

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

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

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc" 

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

像这样的东西应该这样做:

 Assembly assembly = Assembly.LoadFrom("Reports.dll"); Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc"); reportViewer.LocalReport.LoadReportDefinition(stream); 

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

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

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

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

有关如何从不同程序集中的embedded式资源获取stream的详细信息,请参阅: 使用ResourceManager类检索资源

此外,您将需要使用完整名称空间path来引用embedded式资源。

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

 rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";