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

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

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

4 ответа

Решение

Используйте свойство Application.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, средство просмотра отчетов не может найти путь к файлу отчета.

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

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

к этому

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

Спасибо Ганс

Простое решение это..

Путь к проекту по умолчанию: имя проекта / bin / debug

в коде средства просмотра отчетов Reportpath = "../../folder1/report1.rdlc"

Путь по умолчанию - имя проекта / bin / debug, но если вы создаете rdlc в корневом пути, для этого вам нужно перейти в корневой каталог, но.net не предоставляет такой функции, поэтому просто добавьте ../, чтобы изменить текущий каталог для перехода в постоянный каталог.

я помещаю ../../ два раза bcz мой rdlc в корневой путь, поэтому мне нужно изменить отладку, затем bin, и, наконец, я достигаю корневого пути. если у вас есть отдельная папка для rdlc, то убедитесь, что вы пишете имя папки и помещаете / наши их.

Надеюсь, вам это нравится..

Другие вопросы по тегам