这个例子里有个BO: Contacts, 元素为Contact。假设已经建立。Main Report里面就要有个BO的DataSource,名字叫Contact。另外有个SubReport,显示Contact.People.Name, Contact.People.Career等信息。此例中一个Contact对应一个People,SubReport设立好Report Parameter = "Id"。Main Report里把参数传给SubReport。
CodeFile里面增加一个函数,用来处理SubReport:
private void SubreportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)
{
int id= int.Parse(e.Parameters["Id"].Values[0]);
e.DataSources.Add(
new ReportDataSource("People",
new object[] { (PeopleRepository.GetById(id)).People}));
}
在Page_Load的时候声明:
LocalReport lr = new LocalReport();
lr.SubreportProcessing += new SubreportProcessingEventHandler(SubreportProcessing);
根据条件,动态调用Local Report
// set the report and datasource
lr.ReportPath = "Report.rdlc";
lr.DataSources.Add(new ReportDataSource("Contact", contacts));
//这2行用在MainReport: //p = new ReportParameter("CountryName", country.Name);
//lr.SetParameters(new ReportParameter[] { p });
输出到PDF
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string fileNameExtension;
byte[] bytes = lr.Render("PDF", null, out mimeType, out encoding, out fileNameExtension, out streamids, out warnings);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("Content-Type", "application/pdf");
Response.AddHeader("Content-Disposition", "attachment;filename=" + exportFilename + ";");
Response.BinaryWrite(bytes);
Response.Flush();
Response.Close();