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
InteractivityPostBackMode
留言
張貼留言