如何於報表中新增子報表

Designed by Freepik
這篇主要是紀錄如何在報表內,新增一個子報表。
讓報表也有Master-Detail的模式產生。
前面的基本作業就直接跳過,如果對於建立報表、資料集有問題,
要往前看看別的文章了。
圖片來源Designed by Freepik

準備作業:
  1. 建立兩個資料集(Master & Detail)
  2. 建立Detail的子報表並命名為Sub_Report
以上兩個步驟並沒有特別需要說明的地方,
就是單純的依照之前的文章操作。
文章裡所有的命名都可以自己更改。
  1. 於Sub_Report報表新增一個參數「para_custno」





  1. 建立Mater的主報表並命名為main_Report,
  2. 打開工具箱,拉一個子報表物件進來主報表,
  3. 然後在子報表上按下滑鼠右鍵,選擇「子報表屬性」






  1. 子報表屬性的視窗,一般設定中,填入剛剛建立的子報表名稱(Sub_Report)













  1. 子報表屬性的視窗,參數設定中,加入新參數
  2. 名稱為剛剛子報表中設定的參數名稱「para_custno」
  3. 值則選擇資料集中對應的欄位。














到此,主報表與子報表的rdlc檔案準備完畢。
接著新增一個form如下圖,需要四個物件。
  1. 1.ScriptManager
  2. 2.主報表與子報表用的 SqlDataSource
  3. 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));
}

以上就是產生子報表的方法。

沒有留言:

張貼留言

技術提供:Blogger.