web-dev-qa-db-ja.com

DLLファイルに埋め込まれた.RDLCレポートを表示する

Windowsサービスとフォームアプリケーションで使用されるレポートがあります。だから、私はレポートを両方で使用できるDLLファイルに埋め込みます。

問題は、WindowsフォームアプリでReportViewerコントロールのReportEmbeddedResourceプロパティを設定しようとすると、dllファイルではなく、リソースをWindowsフォームアプリで検索することです。

例:Windowsフォームアプリのコード:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

上記のコマンドで、DLLファイル内の埋め込みリソースを検索するにはどうすればよいですか?

40
Jim

このような何かがそれをするはずです:

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

アセンブリの完全な名前空間、フォルダ名、そしてファイル名を使用するだけです。

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

次に、プロパティペインを使用して、レポートファイルが埋め込みリソースとして設定されていることを確認します。

23
Dan Higham

おそらく、他のアセンブリからRDLCリソースへのストリームを取得し、それをレポートビューアーコントロールの "LoadReportDefinition"メソッドに渡すことが最善の方法です。

別のアセンブリの埋め込みリソースからストリームを取得する方法の詳細は、次の場所にあります。 ResourceManagerクラスを使用してリソースを取得する

さらに、完全な名前空間パスを使用して埋め込みリソースを参照する必要があります。

例えば。デフォルトの名前空間がTheAppのアプリケーションがあり、「MyReport.rdlc」というレポートをフォルダに保持している場合「Reports」と呼ばれる場合、レポート参照呼び出しは次のようになります:-

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