У меня проблема с отчетом, но, как ни странно, он не работает только в производственной среде: если я разверну свое решение на локальном IIS или на этапе отладки с VS2013, я могу увидеть отчет с правильно заполненными вложенными отчетами.
Я использую VS2013 и ReportViewer2012.
Итак, в среде разработки и тестирования все в порядке, но в производственной среде, когда я вызываю печать, происходит следующее: «Не удалось получить данные для подотчета ... (для всех подотчетов)». Почему?
Итак, у меня есть контейнер отчетов, внутри которого есть несколько вложенных отчетов и небольшой код:
Источник
loadDataSources(); //loading all datatables of subreports
ReportViewer ReportViewer1 = new ReportViewer();
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.Visible = false;
ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Reports/ReportContainer.rdlc");
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet0", _datatableContainer));
ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
CreatePDF(ReportViewer1, uniquefilename);
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
if (e.ReportPath.ToLower() == "rpt_sub_1")
{
e.DataSources.Add(new ReportDataSource("DataSet1", _datatable1));
e.DataSources.Add(new ReportDataSource("DataSet2", _datatable2));
e.DataSources.Add(new ReportDataSource("DataSet3", _datatable3));
}
if (e.ReportPath.ToLower() == "rpt_sub_2")
{
e.DataSources.Add(new ReportDataSource("DataSet4", _datatable4));
e.DataSources.Add(new ReportDataSource("DataSet5", _datatable5));
e.DataSources.Add(new ReportDataSource("DataSet6", _datatable6));
e.DataSources.Add(new ReportDataSource("DataSet7", _datatable7));
}
//...
Большое спасибо
1 ответ
Хорошо, я исправил эту проблему.
Проблема заключалась в значении e.ReportPath.
Это было в среде тестирования и разработки: «rpt_sub_1» или «rpt_sub_2».
Но в производственной среде было иначе: «C: \ inetpub \ wwwroot \ MyWebSite \ rpt_sub_1.rdlc» и «C: \ inetpub \ wwwroot \ MyWebSite \ rpt_sub_2.rdlc»
Я исправил создание метода расширения следующим образом:
public static string CleanerReportName(this string value)
{
value = value.ToLower();
List<string> _listRemoveItems = new List<string>();
_listRemoveItems.Add(@"C:\inetpub\wwwroot\MyWebSite\");
_listRemoveItems.Add(".rdlc");
_listRemoveItems.ForEach(x => value = value.Replace(x, ""));
return value;
}
А затем я изменил источник следующим образом:
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
if (e.ReportPath.CleanerReportName() == "rpt_sub_1")
{
e.DataSources.Add(new ReportDataSource("DataSet1", _datatable1));
e.DataSources.Add(new ReportDataSource("DataSet2", _datatable2));
e.DataSources.Add(new ReportDataSource("DataSet3", _datatable3));
}
if (e.ReportPath.CleanerReportName() == "rpt_sub_2")
{
e.DataSources.Add(new ReportDataSource("DataSet4", _datatable4));
e.DataSources.Add(new ReportDataSource("DataSet5", _datatable5));
e.DataSources.Add(new ReportDataSource("DataSet6", _datatable6));
e.DataSources.Add(new ReportDataSource("DataSet7", _datatable7));
}
//...
Я надеюсь, что этот пост может кому-то помочь в будущем. до свидания
Похожие вопросы
Новые вопросы
asp.net-mvc
ASP.NET MVC Framework - это платформа и инструмент веб-приложений с открытым исходным кодом, которые реализуют версию шаблона модель-представление-контроллер (MVC), адаптированную к веб-приложениям и построенную на основе технологии ASP.NET.