Получение относительного пути к отчету rdlc в моем приложении winform

Я автоматически создаю PDF-файл из некоторых наших отчетов в конце месяца. Я сталкиваюсь с проблемой, где ReportViewer.LocalReport Не могу найти свой отчет. В рамках проекта файлы отчетов находятся в " (корневая папка проекта)/Отчеты / Отчет.с отчетами".

Как установить ReportViewer.LocalReport.ReportPath чтобы я мог ссылаться на свой файл отчета? Я бы предпочел не задан полный путь, потому что я не знаю, где он будет установлен при установке на клиентские машины.

4 ответов


использовать приложение.Свойство StartupPath, оно всегда указывает на каталог, где находится ваш EXE:

  using System.IO;
  ...

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

вы хотите убедиться, что отчет копируется в папку bin\Debug\Reports, чтобы он работал в среде IDE. Используйте xcopy /s / d в событии после сборки, чтобы скопировать файлы.


путь всегда относительно вашего "текущего каталога", который в большинстве случаев является exe - файлом-измените rdlc-файлы, чтобы они были скопированы в целевую папку вместо встроенных ресурсов(обычно так это делается). Путь в вашем проекте не имеет значения.


вы можете хранить отчеты в файле "ресурсы", и с помощью читателя сборки данного .файл DLL. / exe, в который встроен файл "ресурс", может считываться как потоковая ссылка. Затем установите отчет в встроенный поток, чтобы получить определение отчета.

особое внимание. Если в отчете есть вложенные вложенные Отчеты, Отчет завершится ошибкой, если в определении вложенного отчета LocalReport не будет установлена другая такая ссылка на вложенный отчет .файл rdlc.


есть ошибка из того, что я понимаю, что происходит из Windows XP. Проблема не проявляется в Windows 7.

все вышеперечисленные ответы стоят, но у меня коррекция.

эта проблема проявляется, как только вы используете SaveFileDialog что похоже на изменение пути текущего приложения. Это происходит, когда вы используете текущий путь относительно текущего каталога wokring, который по умолчанию используется для загрузки RDLC, т. е. reportpath = "nameOfReport.rldc". Если вы хотите обновить отчет после использования SaveFileDialog reportviewer не может найти путь к файлу отчета.

решение исходит от Ханса Пассанта на посту выше, но я бы изменил это

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

этой

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

Спасибо Ганс