Я автоматически создаю PDF из некоторых наших отчетов в процессе конца месяца. Я сталкиваюсь с проблемой где ReportViewer.LocalReport
не может найти мой отчет. В рамках проекта файлы отчета находятся в" (корневая папка проекта)/Reports/report.rdlc".
Как я устанавливаю ReportViewer.LocalReport.ReportPath
таким образом, я могу сослаться на свой файл отчета? Я не установил бы полный путь, потому что я не знаю, где он был бы установлен при установке на клиентских машинах.
Используйте свойство 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 в событии после сборки, чтобы скопировать файл (ы).
Вы можете сохранять отчеты в файле "ресурсов" и с помощью средства чтения сборки данной библиотеки .dll / .exe, в которую встроен "ресурсный" файл, можно читать как ссылку на поток. Затем настройте свой отчет на встроенный поток, чтобы получить определение отчета.
Особое примечание. Если в вашем отчете есть вложенные вложенные отчеты, отчет не будет выполнен, если вы также не укажете в определении вложенного отчета LocalReport другую такую ссылку на файл .rdlc вложенного отчета.
Путь всегда относительно вашего "текущего каталога", который в большинстве случаев является исполняемым файлом - измените файлы rdlc, чтобы они вместо этого копировались в папку назначения встроенных в ресурсы (обычно так и делается). Путь в вашем проекте не имеет значения.