42

Windows サービスとフォーム アプリケーションで使用されるレポートがあります。そのため、両方で使用できる DLL ファイルにレポートを埋め込みたいと考えています。

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

例: 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 に答える