2013年9月17日 星期二

在 RDLC 報表使用參數傳遞

透過 Visual Studio 開發 RDLC 報表時,常常為了能夠更彈性地去控制報表,需要以「傳參數」的方式將 .cs 裡的參數串到 .rdlc 報表。這需求大概可分為兩個部份,第一是報表參數的設定,第二則是參數的傳遞。依序紀錄自己這幾天測試的步驟。


報表參數的設定:

01.首先,在我的測試報表 MyReport.rdlc 的 Report Data 視窗中,選取 Parameters ,並執行 「Add Parameter」。

02.接著就會跳出 Report Parameter Properties 視窗。可以在 Name 裡面輸入我們的參數名字。我取名為: MyParam01 ,然後點選「OK」完成參數的設定。因為我想輸入兩個參數,所以再次重複剛剛的動作,並建立 MyParam02 這個參數。


之後在 Report Data 視窗就會呈現如下的畫面:


最後在 MyReport.rdlc 報表拉兩個 TextBox,並分別在他們的 Expression 內容裡,選擇 Parameter →  MyParam01 或 MyParam02,如下圖所示。



參數的傳遞:

我們透過 ReportParameter 類別宣告了兩個變數:p_1 , p_2。分別用來存放剛剛在報表裡宣告的MyParam01 及 MyParam02 的對應資料。然後在我們的 ReportViewer 裡的 LocalReport,利用 SetParameters 屬性加入剛剛宣告的兩個變數即可完成參數的傳遞。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ReportViewer1.LocalReport.DataSources.Clear();
        ReportViewer1.LocalReport.ReportPath = Server.MapPath("MyReport.rdlc");

        Microsoft.Reporting.WebForms.ReportParameter p_1 = new Microsoft.Reporting.WebForms.ReportParameter("MyParam01", "paladin");
        Microsoft.Reporting.WebForms.ReportParameter p_2 = new Microsoft.Reporting.WebForms.ReportParameter("MyParam02", "jason");

        ReportViewer1.LocalReport.SetParameters(new Microsoft.Reporting.WebForms.ReportParameter[] { p_1, p_2 });

        ReportViewer1.LocalReport.Refresh();
    }
}


程式執行後的結果如下:


自己在練習的過程中發現,如果在參數傳遞的程式碼有寫錯,例如報表宣告了兩個參數,但 .cs 檔裡面參數傳遞程式只寫了一個,如此狀況在程式編譯時,並不會顯示錯誤,但你卻會得到完全空白的報表內容。意思是說,當你發現自己的報表內容完全空白時,應該好好檢查自己的程式是否哪裡寫錯了,參數多寫,或少寫了。

沒有留言:

張貼留言