ReportViewer 控件,使您可以向自定義應(yīng)用程序中添加功能齊全的報表。 報表可以包含表格格式數(shù)據(jù)、聚合數(shù)據(jù)和多維數(shù)據(jù)。 提供 ReportViewer 控件的目的是可以處理和顯示應(yīng)用程序中的報表。
控件有兩種版本。 ReportViewer Web 服務(wù)器控件是一個用于在 ASP.NET AJAX 項目中駐留報表的 ASP.NET AJAX 控件。 ReportViewer Windows 窗體控件用于在 Windows 應(yīng)用程序項目中駐留報表。
這兩種版本的控件都可以配置為以本地處理模式或遠程處理模式運行。
一、ReportViewer使用小例子的演示。
1、新建項目。
新建一個Windows窗口程序項目,命名為“Demo";
2、加入ReportViewer控件。
(1)在默認(rèn)出現(xiàn)的Form1.cs[設(shè)計]視圖中手動調(diào)節(jié)下Form1窗體的大小,左側(cè)工具箱-->報表-->雙擊其中的”ReportViewer";
(圖 1)
(2)切換至設(shè)計窗口,選擇ReportVierwer控件右上角黑色小三角,顯示“ReportViewer任務(wù)”,選擇”在父容器中??俊?;
(圖 2)
3、添加數(shù)據(jù)集。
(1)在”解決方案資源管理器“的本項目”Demo“上右鍵,-->添加-->新建項...。在”已安裝的模板“(左側(cè))選擇”數(shù)據(jù)“,在對應(yīng)的右側(cè)欄中選”數(shù)據(jù)集“,并為其命名為”testDataSet.xsd“。
(圖 3)
(2)在自動顯示的testDataSet.xsd窗口空白處右鍵,-->添加-->數(shù)據(jù)表。
(圖 4)
(3)點擊表頭為其改名為”testDataTable",并在下一行的空白處右鍵,-->添加-->列。按快捷鍵“Ctrl + L”,共建四個列,并將列名自定義修改。(及時保存)
(圖 5)
4、添加報表。
(1)同添加數(shù)據(jù)集相似。在項目名稱上右鍵,-->添加-->新建項...。”已安裝模板“中選擇”Reporting“,相應(yīng)右側(cè)選擇”報表“,在下面名稱中改為”testReport.rdlc“。
(圖 6)
(2)在新視圖的主體部分(黑色方框內(nèi)部為主體部分,外部為報表部分)空白處右鍵,-->插入-->表。
(圖 7)
(3)會自動彈出”數(shù)據(jù)集屬性“對話框,將”名稱“改為”DataSetName"(這個名稱很重要,后面代碼中要用到,故要記清),“數(shù)據(jù)源”選擇剛新建的“testDataSet",”可用數(shù)據(jù)集“會自動選擇”testDataTable“,"確定”。
(圖 8)
(4)在testReport.rdlc[設(shè)計]視圖下,剛建的“表”只有三列,在任一單元格上右鍵,-->插入列-->靠右。在第一行的”表頭“輸入這三列的表頭,在第二行的”數(shù)據(jù)“行,鼠標(biāo)移動每個單元格上,點擊單元格右上角的圖標(biāo),選擇相應(yīng)的列。
(圖 9)
5、綁定報表。
返回”Form1.cs[設(shè)計]"視圖,如圖 2類似,這次點擊“選擇報表”右側(cè)的下拉條,選擇我們新建的報表“demo.testReport.rdlc",全部保存。
6、添加代碼。
查看”Form1.cs“的代碼,在Form1_Load()方法中添加代碼。代碼如下(以下只是Form1_Load()方法的代碼,不是全部,添加時需要在using下多加一行)。
using Microsoft.Reporting.WinForms; private void Form1_Load(object sender, EventArgs e) { loadReport(); this.reportViewer1.RefreshReport(); } public void loadReport() { DataTable dt = new DataTable(); //定義本地數(shù)據(jù)表的列,名稱應(yīng)跟之前所建的testDataTable表中列相同。 dt.Columns.Add("Column1", typeof(string)); dt.Columns.Add("Column2", typeof(string)); dt.Columns.Add("Column3", typeof(string)); dt.Columns.Add("Column4", typeof(string)); //動態(tài)生成一些測試用數(shù)據(jù) for (int i = 0; i < 50; i++) { DataRow row = dt.NewRow(); row[0] = "Test01-" + i.ToString(); row[1] = "Test02-" + i.ToString(); row[2] = "Test03-" + i.ToString(); row[3] = "Test04-" + i.ToString(); dt.Rows.Add(row); } //設(shè)置本地報表,使程序與之前所建的testReport.rdlc報表文件進行綁定。 this.reportViewer1.LocalReport.ReportPath = "testReport.rdlc"; this.reportViewer1.LocalReport.DataSources.Clear(); this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetName",dt)); }
7、運行效果。
二、需要注意的幾個地方。
1、代碼中new ReportDataSource("DataSetName",dt)),這里的DataSetName是上面”一、4、(3)“里那個名字,而不是所建的數(shù)據(jù)集文件”testDataSet.xsd"的名字。我之前因為把這里弄錯,花了好長時間才修正。
2、按上述步驟弄完后,也許還不好出來想要的結(jié)果??赡軙棾觥氨镜貓蟊硖幚砥陂g出錯”等錯誤提示。
解決方法:將“testReport.rdlc"文件復(fù)制一份放到提示的指定Debug目錄下。
上述方法固然可以,但每次都要手動將文件進行復(fù)制,顯然不合適。這時其實只需要在”解決方案資源管理器“中點擊報表文件”testReport.rdlc",在下方的屬性一欄中,從“復(fù)制到輸出目錄”后面的下拉菜單中選擇“始終復(fù)制”。這樣,便不用手動往Debug目錄復(fù)制文件了。(也有網(wǎng)友將屬性中的“生成操作”一項的“嵌入的資源”改為“內(nèi)容”。但對本例不適用,僅作說明)
三.C# 利用ReportViewer生成報表實例
利用微軟自帶的控件ReportViewer進行報表設(shè)計的小例子,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正。
涉及知識點:
ReportViewer :位于Microsoft.Reporting.WinForms命名空間, 主要用于報表的顯示
Report:報表,以rdlc結(jié)尾的文件,可視化設(shè)計報表模板。
報表數(shù)據(jù):內(nèi)置字段,參數(shù),圖像,數(shù)據(jù)集(本報表主要使用參數(shù),和數(shù)據(jù)集)
ReportParameter:使用名稱和值實例化新的報表參數(shù)
ReportDataSource:報表的數(shù)據(jù)源與DataTable對象聯(lián)系起來
效果圖
如下:
核心代碼
/// <summary> /// 設(shè)置報表 /// </summary> private void SetReport() { //第一步:清除之前的數(shù)據(jù) this.rptView.LocalReport.DataSources.Clear(); //第二步:指定報表路徑 this.rptView.LocalReport.ReportPath = "Report2.rdlc"; //第三步:構(gòu)造新的DataTable DataTable dt = new DataTable("DataTable1"); dt.Columns.Add("Name"); dt.Columns.Add("Score"); dt.Columns.Add("Id"); dt.Rows.Add(new object[] { "語文", 80, "Y0001" }); dt.Rows.Add(new object[] { "數(shù)學(xué)", 75, "S0001" }); dt.Rows.Add(new object[] { "英文", 96, "E0001" }); //名稱不能寫錯,和報表中的數(shù)據(jù)集名稱一致 ReportDataSource rdsItem = new ReportDataSource("DataSet1", dt); //此處可以有多個數(shù)據(jù)源 this.rptView.LocalReport.DataSources.Add(rdsItem); //第四步:構(gòu)造參數(shù) List<ReportParameter> lstParameter = new List<ReportParameter>() { new ReportParameter("Title",this.txtTitle.Text), new ReportParameter("Id",this.txtId.Text), new ReportParameter("Name",this.txtName.Text), new ReportParameter("Age",this.txtAge.Text), new ReportParameter("Sex",this.txtSex.Text), new ReportParameter("Salary",this.txtSalary.Text), new ReportParameter("Depart",this.txtDepart.Text) }; this.rptView.LocalReport.SetParameters(lstParameter); this.rptView.ZoomMode = ZoomMode.Percent; this.rptView.ZoomPercent = 100; //第五步:刷新報表 this.rptView.RefreshReport(); }
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進入論壇