Windowsサービスとフォームアプリケーションで使用されるレポートがあります。だから、私はレポートを両方で使用できるDLLファイルに埋め込みます。
問題は、WindowsフォームアプリでReportViewerコントロールのReportEmbeddedResourceプロパティを設定しようとすると、dllファイルではなく、リソースをWindowsフォームアプリで検索することです。
例:Windowsフォームアプリのコード:
rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"
上記のコマンドで、DLLファイル内の埋め込みリソースを検索するにはどうすればよいですか?
このような何かがそれをするはずです:
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";
次に、プロパティペインを使用して、レポートファイルが埋め込みリソースとして設定されていることを確認します。
おそらく、他のアセンブリからRDLCリソースへのストリームを取得し、それをレポートビューアーコントロールの "LoadReportDefinition"メソッドに渡すことが最善の方法です。
別のアセンブリの埋め込みリソースからストリームを取得する方法の詳細は、次の場所にあります。 ResourceManagerクラスを使用してリソースを取得する
さらに、完全な名前空間パスを使用して埋め込みリソースを参照する必要があります。
例えば。デフォルトの名前空間がTheAppのアプリケーションがあり、「MyReport.rdlc」というレポートをフォルダに保持している場合「Reports」と呼ばれる場合、レポート参照呼び出しは次のようになります:-
rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";