如何於報表中新增子報表
讓報表也有Master-Detail的模式產生。
前面的基本作業就直接跳過,如果對於建立報表、資料集有問題,
要往前看看別的文章了。
準備作業:
- 建立兩個資料集(Master & Detail)
- 建立Detail的子報表並命名為Sub_Report
就是單純的依照之前的文章操作。
文章裡所有的命名都可以自己更改。
- 於Sub_Report報表新增一個參數「para_custno」
- 建立Mater的主報表並命名為main_Report,
- 打開工具箱,拉一個子報表物件進來主報表,
- 然後在子報表上按下滑鼠右鍵,選擇「子報表屬性」
- 子報表屬性的視窗,一般設定中,填入剛剛建立的子報表名稱(Sub_Report)
- 子報表屬性的視窗,參數設定中,加入新參數
- 名稱為剛剛子報表中設定的參數名稱「para_custno」
- 值則選擇資料集中對應的欄位。
到此,主報表與子報表的rdlc檔案準備完畢。
接著新增一個form如下圖,需要四個物件。
- 1.ScriptManager
- 2.主報表與子報表用的 SqlDataSource
- 3. 當然是報表物件
接著請參考前面自訂資料來源的文章,
將SqlDataSource指定給報表前,必須加上一行指令,指定子報表事件處理常式。
ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("M_DataSet1", main_ds));
最後,於子報表事件處理常式加入加入以下程式碼,即可完成。
請注意紅色的字體,參數名稱就是我們在子報表中加入的參數「para_custno」。
/// <summary>
/// 繫結子報表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
//取得參數
string sCustno = e.Parameters["para_custno"].Values[0];
//取得明細資料
string strSQL = @"SELECT SerialNo,model,QryStatus,crDate
FROM QryWarranty_Temp
where Cust_no = @Cust_no";
sub_ds.SelectParameters.Clear();
sub_ds.SelectParameters.Add("Cust_no", TypeCode.String, sCustno);
sub_ds.SelectCommand = strSQL;
sub_ds.SelectCommandType = SqlDataSourceCommandType.Text;
//繫結子報表
e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("sub_DataSet", sub_ds));
}
以上就是產生子報表的方法。
沒有留言:
張貼留言