Dhyanga Ответов: 1

Как генерировать отчеты в цикле и отправлять их в один pdf файл


Я пытаюсь сгенерировать 10 отчетов один за другим, беря данные из базы данных, а затем пытаясь объединить все в один выходной pdf-файл. У меня есть дизайн в форме. rdlc. Вот мой код C# :
var db = Database.Open("dbConnection");
    var data = db.QuerySingle("select name from customer_table where id = 2");            
  


    Microsoft.Reporting.WebForms.ReportViewer RptVr = new   Microsoft.Reporting.WebForms.ReportViewer();
    
        RptVr.LocalReport.ReportPath = "~/report/a.rdlc";
    
    RptVr.LocalReport.EnableExternalImages = true;

    Microsoft.Reporting.WebForms.ReportParameter[] x = new Microsoft.Reporting.WebForms.ReportParameter[1];
  
    var fname = "";
    
        fname = "inline; filename=reportCard" + a + ".pdf";
    x[0] = new Microsoft.Reporting.WebForms.ReportParameter("Name", data.name);  




    RptVr.LocalReport.SetParameters(x);
    string deviceInfo =
     "<DeviceInfo>" +
     "  <OutputFormat>EMF</OutputFormat>" +
     "  <PageWidth>11in</PageWidth>" +
     "  <PageHeight>8.5in</PageHeight>" +
     "  <MarginTop>0in</MarginTop>" +
     "  <MarginLeft>0in</MarginLeft>" +
     "  <MarginRight>0in</MarginRight>" +
     "  <MarginBottom>0in</MarginBottom>" +
     "</DeviceInfo>";

    Byte[] results =  RptVr.LocalReport.Render("PDF", deviceInfo);
 

    Response.ContentType = "Application/pdf";
    Response.AddHeader("content-disposition", fname);
    Response.OutputStream.Write(results, 0, results.Length);




это работает, но когда я пытаюсь сделать цикл, как показано ниже, я знаю, что что-то не так. Я попытался сгенерировать отчет в цикле и получить один выходной файл pdf.

var db = Database.Open("dbConnection");
    var data = db.Query("select name from customer_table");            
  
 for(i = 0; i<data.length;i++)
{

    Microsoft.Reporting.WebForms.ReportViewer RptVr = new   Microsoft.Reporting.WebForms.ReportViewer();
    
        RptVr.LocalReport.ReportPath = "~/report/a.rdlc";
    
    RptVr.LocalReport.EnableExternalImages = true;

    Microsoft.Reporting.WebForms.ReportParameter[] x = new Microsoft.Reporting.WebForms.ReportParameter[1];
  
    var fname = "";
    
        fname = "inline; filename=reportCard" + a + ".pdf";
    x[0] = new Microsoft.Reporting.WebForms.ReportParameter("Name", data.name);  




    RptVr.LocalReport.SetParameters(x);
    string deviceInfo =
     "<DeviceInfo>" +
     "  <OutputFormat>EMF</OutputFormat>" +
     "  <PageWidth>11in</PageWidth>" +
     "  <PageHeight>8.5in</PageHeight>" +
     "  <MarginTop>0in</MarginTop>" +
     "  <MarginLeft>0in</MarginLeft>" +
     "  <MarginRight>0in</MarginRight>" +
     "  <MarginBottom>0in</MarginBottom>" +
     "</DeviceInfo>";

    Byte[] results =  RptVr.LocalReport.Render("PDF", deviceInfo);


    Response.ContentType = "Application/pdf";
    Response.AddHeader("content-disposition", fname);
    Response.OutputStream.Write(results, 0, results.Length);
i++;
}


Пожалуйста, помогите, как мне это сделать.

Что я уже пробовал:

Я попытался динамически генерировать отчеты один за другим в цикле и попытаться поместить их в один pdf файл

1 Ответов

Рейтинг:
1

Philippe Mori

Одним из решений является создание большого отчета с вложенными отчетами, а затем печать большого отчета.

Таким образом, по существу, каждый из существующих отчетов станет вложенным отчетом основного отчета.

Вам нужно будет создать один файл RDLC для основного отчета и добавить каждый вложенный отчет. Возможно, вам придется "зациклить" вложенный отчет, если один и тот же вложенный отчет можно повторить.

Вам нужно будет "отправить" соответствующие параметры в каждый вложенный отчет. И вы также должны правильно настроить макет, чтобы получить желаемый конечный результат.

Ведь это большая работа... У меня нет никакого кода, так как он не тривиален, и у меня нет доступа к коду, который я сделал.