最近公司的功能需要使用报表,用的是微软自带的报表,谈一谈我们的做法,希望可以给想学习的人一些指导
1:新建報表所需的數據源DataSet.cs
class="brush">using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; namespace ******** { public class DataSet { public DataTable CreatDataSet() { DataTable dt = new DataTable(); dt.Columns.Add("A"); dt.Columns.Add("B"); dt.Columns.Add("C"); return dt; } } }
指定所需要綁定的Table的列,返回dataTable 類,CreatDataSet方法名稱隨便起,也可以在一個類裏面定義多個方法(不同數據源)
2:設計報表
報表設計這裡就不涉及了
3:把第一步新建的數據源加到報表裏面綁定
注意:這裡需要先引用 Interop.VBA.dll 才可以把新建的CS文件作為數據源導入
把數據源導入后綁定即可
4:直接把報表導出為PDF,Excel等格式
ReportViewer viewer = new ReportViewer(); viewer.ProcessingMode = ProcessingMode.Local; viewer.LocalReport.ReportEmbeddedResource = "***.Page.Report.Report1.rdlc"; ReportDataSource rds_1 = new ReportDataSource("DataSet1", dtReport);//DataSet1為報表裏面的數據源名稱 viewer.LocalReport.DataSources.Add(rds_1); ReportParameter rp1 = new ReportParameter("參數1","參數1的值" );//給參數賦值 ReportParameter rp2 = new ReportParameter("參數2","參數2的值" ); viewer.LocalReport.SetParameters(new ReportParameter[] {rp1, rp2 }); Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty; string extension = string.Empty; byte[] bytes = viewer.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIds, out warnings); //Excel ,PDF ,Word 等格式 // Now that you have all the bytes representing the PDF report, buffer it and send it to the client. Response.Buffer = true; Response.Clear(); Response.ContentType = mimeType; Response.AddHeader("content-disposition", "attachment; filename=1_" + DateTime.Now.ToString("yyyyMMddhhssmm") + "" + "." + extension); Response.BinaryWrite(bytes); // create the file Response.Flush(); // send it to the client to download
5:在頁面引用報表(rpResult為報表控件)
DataTable dt = new DataTable();//自己拼出數據源就可以 ReportDataSource repDataSource = new ReportDataSource("DataSet1", dt); //*設置報表參數,并顯示 this.rpResut.LocalReport.ReportEmbeddedResource = "***.Page.Report.Report1.rdlc""; this.rpResut.LocalReport.DataSources.Clear(); this.rpResut.LocalReport.DataSources.Add(repDataSource); ReportParameter rp1 = new ReportParameter("參數1","參數1的值" );//給參數賦值 ReportParameter rp2 = new ReportParameter("參數2","參數2的值" ); this.rpResut.LocalReport.SetParameters(new ReportParameter[] {rp1, rp2 }); this.rpResut.DataBind(); this.rpResut.LocalReport.Refresh();
至此,報表的產出和顯示都OK了,如果需要更深入的了解,請查看其它文章