Получение относительного пути к отчету rdlc в моем приложении winform - PullRequest
8 голосов
/ 24 апреля 2010

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

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

Ответы [ 5 ]

16 голосов
/ 24 апреля 2010

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

0 голосов
/ 23 мая 2019

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

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

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

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

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

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

0 голосов
/ 28 октября 2011

Насколько я понимаю, есть ошибка, связанная с Windows XP. Эта проблема не отображается в Windows 7.

Все вышеприведенные ответы верны, но у меня есть исправление.

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

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

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

к этому

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

Спасибо, Ганс

0 голосов
/ 24 апреля 2010

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

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

0 голосов
/ 24 апреля 2010

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

...