Из C# при вызове отчета SSRS только основной отчет отображает данные подотчета с ошибкой

Я разработал отчет SSRS, имеющий основной и 3 подчиненных отчета. Я звоню этот отчет из C#. Я только знаю, как связать основной rdlc с набором данных.

Я использую код ниже для этого

SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
dataAdapter.Fill(dataset);
this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\sale_dept.rdl";
 this.reportViewer1.LocalReport.DataSources.Clear();
 this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dataset.Tables[0]));
this.reportViewer1.RefreshReport();

когда я запускаю exe, я получаю средство просмотра отчетов, заполненное основным отчетом, но в 3 подотчетах отображается ошибка, потому что я не указал DataSource для этих подотчетов

  1. Между основным и другими подотчетами нет передачи параметров
  2. Имя набора данных для основного и всех вложенных отчетов по умолчанию - DataSet1.

Помогите мне связать подотчеты с соответствующими таблицами наборов запросов. Я полностью застрял здесь.

отредактированный

Я изменил свой проект с 1 подотчетом.

В SSRS он работает нормально в редакторе (BIDS), но при вызове из C# выдает ошибку:

Не может быть найдено в указанном месте. Пожалуйста, проверьте, что подотчет был опубликован и что имя является правильным.

Мой код:

subreportevenhandler according to this question

вопрос для обработчика события подотчета

 SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
    dataAdapter.Fill(dataset);
    this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\sale_dept.rdl";
     this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.SubreportProcessing +=
                new SubreportProcessingEventHandler(addsubreport);
     this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dataset.Tables[0]));
    this.reportViewer1.RefreshReport();




void addsubreport(object sender, SubreportProcessingEventArgs e)
        {
            SqlConnection conn = new SqlConnection(source);
            DataSet dataset = new DataSet();
            conn.Open();

           SqlCommand sqlcomm = new SqlCommand( "Query for subreport", conn);

           SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
           dataAdapter.Fill(dataset);

           e.DataSources.Add(new ReportDataSource("DataSet1", dataset.Tables[0]));
        }

Тем не менее я получаю сообщение об ошибке для подотчета я переместил весь файл.rdl в папку C# bin..

Основной отчет показывает данные правильно. В ССРС это нормально..

1 ответ

Решение

Я выяснил проблему. Я отправляю это как ответ, потому что это может помочь кому-то в будущем.

SubreportProcessingEventHandler будет уволен только за .rdlc подотчеты. В моем проекте основной отчет и все подотчеты .rdl расширение. Таким образом, единственное изменение, которое я сделал, пошло в командную строку и переименовало расширение подотчета .rdlc

например:- ren discount.rdl discount.rdlc

Затем прикрепите набор данных для подотчета соответственно.

Смотрите код как ниже

SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
dataAdapter.Fill(dataset);
this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\main_rpt.rdl";
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.SubreportProcessing +=
new SubreportProcessingEventHandler(addsubreport);
this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dataset.Tables[0]));
this.reportViewer1.RefreshReport();


void addsubreport(object sender, SubreportProcessingEventArgs e)
{

SqlCommand sqlcomm = new SqlCommand();
SqlDataAdapter dataAdapter = new SqlDataAdapter();
DataSet dataset = new DataSet();

Switch(e.ReportPath)
{
case "subreport1":
   sqlcomm = new SqlCommand( "Query for subreport one", conn);
   dataAdapter = new SqlDataAdapter(sqlcomm);
   dataAdapter.Fill(dataset);
   e.DataSources.Add(new ReportDataSource("DataSet for subreport1", dataset.Tables[0]));
   break;
case "subreport2":
   sqlcomm = new SqlCommand( "Query for subreport two", conn);
   dataAdapter = new SqlDataAdapter(sqlcomm);
   dataAdapter.Fill(dataset);
   e.DataSources.Add(new ReportDataSource("DataSet for subreport2", dataset.Tables[0]));
   break;
case "subreport3":
   sqlcomm = new SqlCommand( "Query for subreport three", conn);
   dataAdapter = new SqlDataAdapter(sqlcomm);
   dataAdapter.Fill(dataset);
   e.DataSources.Add(new ReportDataSource("DataSet for subreport3", dataset.Tables[0]));
   break;

 }

}

Переключение необходимо, если у вас есть несколько подотчетов. Главное отметить

  1. Весь подотчет должен иметь расширение.rdlc

2.Если какой-либо параметр передается, убедитесь, что он также назван правильно.

  1. Укажите путь правильно. Основной отчет и вложенный отчет лучше поместить в одну папку.

Теперь запустите приложение C#, оно покажет основной отчет со всеми вложенными отчетами.

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