本文轉載自:http://www.cnblogs.com/wjbobo/archive/2012/03/13/2362115.html
RDLC子報表主要設置:
1 .先添加報表控件,在控件中拉入報表的表格Table 控件,在報表工具欄中拖入子報表控件到Table的某個單元格.
2 .在子報表控件上右鍵子報表屬性,選擇選項卡常規-名稱 添加子報表的名稱 可自定義,將此報表用做子報表 中添加 已存在的報表名稱,例如SaleMonthReport 不需要加.rdlc 后綴名。
3.選擇參數選項卡,添加參數(參數可以使主報表的數據集內容,參數等) 名稱可以自定義(注意:自定義的名稱必須和子報表參數同名,並且在子報表添加 參數后 在測試,否則會報 本地報表呈現錯誤,value 值不能為Null的錯誤),值為數據集值、參數、內置字段、固定值 等。
到此 基本子報表配置完成。后面通過代碼注冊子報表
4.在aspx后台代碼中 其他代碼和普通代碼類似,主要注冊主報表的 SubReportProcessing 事件
ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
5.在LocalReport_SubreportProcessing 中添加子報表的數據源
這里通過 string fname=e.Parameters["fname"].Values[0]; 取得子報表參數值,這里根據參數值 取得報表的數據(還有一種方法是這里不適用參數取子報表的數據,將所有的數據全部取出,然后報表會根據參數自動顯示符合參數的數據內容,當數據量龐大時,效率不高) .
Datatable dtDetail=new class1().getModelByName(fname); //這個最好寫在外面,為什么大家應該知道,因為有多少條主報表數據,子報表就會循環多少次。
e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dtDetail", dtDetail)); //添加子報表的數據
完整代碼:
ReportViewer1.Visible=true;
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dtInfo));
ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
ReportViewer1.LocalReport.Refresh();
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) {
string fname=e.Parameters["fname"].Values[0];
Datatable dtDetail=new class1().getModelByName(fname);
e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dtDetail", dtDetail));
}