rdlc 鑽研報表

建立兩個資料集,一個命名為MainDataSet,另一個命名為DrillDataSet,並建立DataTable且設定好所要的表格欄位。完成如下


建立主報表並命名為Main.rdlc
設定資料來源為剛建立的MainDataSet,資料集名稱命名為maindataset

設計好所要欄位
以下最左邊為要給使用者點選以產生鑽研報表
在該文字輸入框右鍵-->文字方塊屬性 --> 動作 

選擇移至報表,指定報表則輸入鑽研報表的名稱(在此以RrillReport),不須加上rdlc
有參數要給鑽研報表的話則點選下方的"加入"按鈕

 主報表設計完成畫面

建立鑽研報表,命名為DrillReport.rdlc
設定資料來源為之前建立的DrillDataSet,資料集名稱命名為drilldataset


有從主報表接收參數的話動作如下
報表資料視窗中的參數-->右鍵-->加入參數
名稱需與主報表設定輸入的一樣

鑽研報表設計完成畫面
(在此用一個圖表與一個資料表顯示)



aspx
拉出ReportViewer元件
該屬性中InteractivityPostBackMode 須設定為同步回傳(預設為永遠非同步回傳)


ReportViewer事件中在Drillthrouhg中建立事件

cs
輸入以下程式碼

using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;


            if (!IsPostBack)
            {
                 //資料庫連線與SQL語法動作跳過,需要可至之前文章查看            
                //主報表動作
                ReportViewer1.LocalReport.ReportPath = "Main.rdlc";
                ReportViewer1.LocalReport.DataSources.Clear();
                ReportDataSource rds = new ReportDataSource("maindataset", dt);
                ReportViewer1.LocalReport.DataSources.Add(rds);
                ReportViewer1.Visible = true;
                ReportViewer1.LocalReport.Refresh();
            }

//鑽研報表事件
protected void ReportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
        {
            //可用 lr.IsDrillthroughReport驗證此報表是否為鑽研報表
            LocalReport lr = (LocalReport)e.Report;
           
            string[] cloumName = { "cname", "acceptCount", "work_time_avg", "wait_time_avg" };
            IList<ReportParameter> list = lr.OriginalParametersToDrillthrough;  //得到主報表傳來的參數(外部參數幾個長度就為幾)
            DataTable dt = new DataTable();
            DataRow dr = dt.NewRow();
            ReportParameter para = new ReportParameter();
            
            for (int i = 0; i < cloumName.Length; i++)
            {
                dt.Columns.Add(cloumName[i]);   //建立表格欄位-->                // dt.Columns.Add("kind");

                para = list[i];             //將得到參數給予reportparameter
                dr[cloumName[i]] = para.Values[0].ToString();          //放入列
            }

            dt.Rows.Add(dr);
            ReportDataSource rds = new ReportDataSource("drilldataset", dt);
            lr.DataSources.Add(rds);
        }

主報表
點選a1的click

 點選a5的click




InteractivityPostBackMode

留言

這個網誌中的熱門文章

SQL SEVER備份與還原遭遇問題

asp.net頁面間傳值