我有一份主要报告,需要有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]));
}
在运行时,我在tblB上看到来自tblA和子报告的数据的报告。 tblC的子报表仅显示静态文本,但报表中缺少数据!
如果有人能指导我正确的编码,以便所有子报告数据都能显示在主报告中,我将不胜感激。
提前谢谢。
答案 0 :(得分:0)
好的,这是来自内存,但我相信每次处理每个子报表时都会调用子报表处理处理程序。因此每个子报表在每次需要数据时都会生成一个单独的事件。
所以,您需要在处理程序中确定哪个子报表要求该特定调用的数据,并为其提供所需的数据。