9

月末のプロセスで、一部のレポートから PDF を自動的に作成しています。ReportViewer.LocalReportレポートが見つからないという問題が発生しています。プロジェクト内では、レポート ファイルは「(プロジェクト ルート フォルダー)/Reports/report.rdlc」にあります。

ReportViewer.LocalReport.ReportPathレポート ファイルを参照できるように設定するにはどうすればよいですか? クライアント マシンにインストールしたときにどこにインストールされるかわからないため、フル パスを設定したくありません。

4

5 に答える 5

16

Application.StartupPath プロパティを使用します。これは常に、EXE が配置されているディレクトリを指します。

  using System.IO;
  ...

     string exeFolder = Application.StartupPath;
     string reportPath = Path.Combine(exeFolder, @"Reports\report.rdlc");

IDE で機能するように、レポートが bin\Debug\Reports フォルダーにもコピーされることを確認する必要があります。ビルド後のイベントで xcopy /s /d を使用して、ファイルをコピーします。

于 2010-04-23T21:39:15.667 に答える
0

私が理解していることから、Windows XP に起因するバグがあります。この問題は、Windows 7 では発生しません。

上記の回答はすべて有効ですが、訂正があります。

この問題SaveFileDialogは、現在のアプリケーションのパスを変更するように見える を使用すると発生します。これは、RDLC をロードするためのデフォルトである現在の wokring ディレクトリに相対的な現在のパスを使用する場合に発生しますreportpath = "nameOfReport.rldc"。SaveFileDialog を使用した後にレポートを更新する場合、レポート ビューアーはレポート ファイルへのパスを見つけることができません。

解決策は上記の投稿のHans Passantからのものですが、私はこれから変更します

string exeFolder = Path.GetDirectoryName(Application.StartupPath);

これに

string exeFolder = Path.GetDirectoryName(Application.ExecutablePath);

ありがとうハンス

于 2011-10-28T15:16:15.107 に答える
0

パスは常に「現在のディレクトリ」からの相対パスです。ほとんどの場合は exe ファイルです。rdlc ファイルを変更して、リソースに埋め込むのではなく、宛先フォルダーにコピーするようにします (通常はこの方法で行います)。プロジェクト内のパスは重要ではありません。

于 2010-04-23T21:36:13.087 に答える
0

レポートを「リソース」ファイルに保存し、「リソース」ファイルが埋め込まれた特定の .dll / .exe のアセンブリ リーダーを使用して、ストリーミング リファレンスとして読み取ることができます。次に、レポートを埋め込みストリームに設定して、レポート定義を取得します。

特記事項。レポートにネストされたサブレポートがある場合、LocalReport サブレポート定義でサブレポート .rdlc ファイルへの別の参照を設定しない限り、レポートは失敗します。

于 2010-04-23T21:37:11.680 に答える