VS 2017 с локальными отчетами - определение отчета не указано
Я использую vs2017 с ReportViewer 14.0 в приложении WinForms. Я делал это раньше в предыдущих версиях VS без каких-либо проблем, и я очень удивлен, почему я не могу заставить это работать на этот раз.
Вот что я сделал до сих пор:
- Я создал отчет (RDLC) в папке "Отчеты", которая находится в корне приложения.
- Я установил для BuildAction значение None, а для параметра "Копировать в выходной каталог" - "Копировать, если новее"
- В новой форме я разместил компонент ReportViewer (он называется rpt)
- Я установил режим обработки на локальный
- В событии Load формы я запускаю следующий код:
string path = AppDomain.CurrentDomain.BaseDirectory + @"Reports\Report.rdlc";
rpt.LocalReport.ReportPath = path;
rpt.LocalReport.SetParameters(new ReportParameter("parTitle", Title));
rpt.LocalReport.DataSources.Add(new ReportDataSource("ds", Data));
rpt.Refresh();
Когда я запускаю приложение, форма загружается, но ReportViewer отображает сообщение: определение отчета не указано
Я также попытался установить действие сборки для EmbeddedResource и использовать:
rpt.LocalReport.ReportEmbeddedResource = "Project.Reports.Report.rdlc";
Тот же результат. Я даже попробовал:
Assembly a = Assembly.GetExecutingAssembly();
Stream report = a.GetManifestResourceStream("Project.Reports.Report.rdlc");
rpt.LocalReport.LoadReportDefinition(report);
Нет разницы. Я всегда получаю это:
Я смотрю на это уже несколько часов, и по жизни я не могу понять, что я делаю неправильно. Любая помощь будет принята с благодарностью.
Спасибо.
1 ответ
Сейчас я чувствую себя довольно глупо, но, как ссылка на любого, кто сталкивается с той же проблемой, я публикую решение здесь.
изменения
rpt.Refresh();
в
rpt.RefreshReport();
сделал трюк. Теперь отчет загружается правильно. Refresh наследуется от Control и только делает недействительным элемент управления, но не заставляет отчет обрабатываться и обрабатываться. RefreshReport делает именно это.
Надеюсь, это сэкономит кому-то время.