Кодирование нескольких подотчетов в Visual Studio 2010 Reportviewer - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть основной отчет, который должен иметь 2 или более вложенных отчетов.В Form_Load я запрограммировал это так: -

cmdReport.CommandText = "SELECT * FROM tblA; SELECT * FROM tblB; SELECT * FROM tblC";  
// tblA is main report
// execute query by SqlDataReader drReport and load result to dataset dsReport
drReport = cmdReport.EcecuteReader();
dsReport.Load(drReport, LoadOption.OverwriteChanges, dsReport.Tables[0], tables[1], Tables[2]);
// prepare report rptMain for view
reportViewer1.LocalReport.ReportEmbeddedResource = "rptMain.rdlc");
// add a handler for SubreportProcessing
reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler  (SubreportProcessingEventHandler);
// then
ReportDataSource rds = new ReportDataSource();
rds.Name = "DataSet1"   // DataSet1 is the name of DataSet in main and subreports
rds.Value = dsReport.Table[0];
reportViewer1.LocalReport.DataSources.Add(rds);
// preview the report
reportViewer1.RefreshReport();

// In the SubreportProcessingEventHandler I coded thus:-
void SubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
    e.DataSources.Add(new ReportDataSource("DataSet1", dsReport.Table[1]));
    e.DataSources.Add(new ReportDataSource("DataSet1", dsReport.Table[2]));
}

Во время выполнения я вижу отчет с данными из tblA и вложенный отчет по tblB.Подотчет для tblC показывает только статический текст, но в отчете отсутствуют данные!

Буду признателен, если кто-нибудь сможет подсказать мне правильное кодирование, чтобы все данные подотчетов могли отображаться в основном отчете.1007 * Спасибо заранее.

1 Ответ

0 голосов
/ 10 ноября 2011

ОК, это из памяти, но я считаю, что обработчик обработки подотчета вызывается один раз при каждой обработке каждого подотчета.Таким образом, каждый подотчет генерирует отдельное событие каждый раз, когда ему нужны данные.

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

...