使用RDLC報表(三、四)
技術類文章 2009-10-13 15:17 閱讀4 評論0 字型大小: 大大 中中 小小
使用RDLC報表三:
在使用報表向客戶展示結果資料時,即時的在報表中顯示某些特定的資料是必需的,如:顯示的部門、列印的日期等。本文只簡單的示範向報表內傳入一個字元值。如有其它問題,歡迎討論。
1、建立一個工程TestReport,一個Form表單,放入一個TextBox、一個Button按鈕,再放入一個ReportViewer控制項。
2、在ReportViewer上選擇建立一個報表
3、在開啟的報表設計師中,選擇工具列的“報表”中的“報表參數”,新加一個參數,名稱為content,資料類型為string,確定。
4、在報表設計師的頁面上放入一個文字框,在文字框上按滑鼠右鍵->屬性,在“文字框屬性”視窗中,選擇“常規”選項卡內下部的“值”後面的“編輯運算式”按鈕(就是那個Fx),在此視窗內,左下框內選擇參數,在右下框將會出現在上一步中設定的參數,雙擊此參數,在上面的框內將出現所需要的運算式:=Parameters!content.Value。儲存此報表。報表預設名稱為Report1.rdlc。
5、在Form表單內雙擊按鈕,編寫如下代碼:
this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });
this.reportViewer1.RefreshReport();
6、運行工程,在文本輸入框內輸入資料,按下按鈕,資料是不是已經傳入報表了?
使用RDLC報表四:
本文內以MSServer內建Northwind庫檔案內的Customers及Orders這兩個表為例,建立兩個報表檔案,在查詢得出Customers的表資料後,點擊此表內的CustomerID資料,報表將轉入至下一個報表,並顯示與之相關的Orders的資料,即VS中所謂的切入式報表。
1、開啟一個工程,並建立一個From,放入一個Button及一個ReportViewer控制項。
2、在工程內建立一個資料來源,串連到Northwind庫檔案,顯示Customers及Orders這兩個表
3、建立一個報表檔案,並以表格的形式來顯示資料,將Customers表內的CustomerID、CompanyName及Address三個欄位放入,形成一份有表頭及資料的簡單報表,並將此報表儲存命名為customerReport
4、再建一個報表檔案,與customerReport相同,也以表格的形式來顯示報表,將Orders內的OrderID、CustomerID、ShipName及OrderDate四個欄位放入表格內,報表儲存為orderReport
5、orderReport的資料來源根據主報表customerReport的資料來確定資料來源的資料,查看錶格的資料集名稱,我的顯示為NorthwindDataSet_Orders,也可以自己另建一個,具體方法見我的《RDLC報表(二)》
6、再開啟customerReport報表,將CustomerID設定成為可點擊的索引欄位,以便轉入下一個報表。選擇CustomerID欄位,按滑鼠右鍵,在”文字框屬性“視窗中,選擇”導航“選項卡,在下面的”超連結“中選擇”跳至報表“,在報表名稱中選擇”orderReport“,再按下後面的”參數...“按鈕,輸入一個參數名稱,如customerid,參數值選擇=Fields!CustomerID.Value。為了與其它資料相區分,可以將此列資料根據自己的習慣改變顏色或加底線
7、在orderReport中,設定一個報表參數,與CurtomerReprot中的名稱相同,以接收父表中傳入的參數
8、建立兩個取得資料的方法,一個從Customers中取得資料集,另一個從Orders中取得資料集,且帶參數。此兩個方法可以自己編寫類庫來實現,也可以在VS的資料集內添加。為了示範方便,我直接使用了Customers的GetData(),並編寫了一個Orders的GetDataByCustomerID(@cid)的方法。
9、在From的Button中編寫如下代碼:
private void button2_Click(object sender, EventArgs e)
{
NorthwindDataSet.CustomersDataTable dt1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter().GetData();
this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.customerReport.rdlc";
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Customers", dt1));
this.reportViewer1.RefreshReport();
}
10、使用報表的Drillthrough事件,當選擇了切入項時會發生此事件,給下一個報表取值,代碼如下:
private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
{
LocalReport lp = (LocalReport)e.Report;
string customerid = lp.GetParameters()["customerid"].Values[0].Trim();
lp.DataSources.Clear();
lp.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders",
new NorthwindDataSetTableAdapters.OrdersTableAdapter().GetDataByCustomerID(customerid)));
}
運到結果:
運行第一份報表:
切入後運行第二份報表: