ReportViewer主要用於打印和導出數據到pdf或excel,接下來將簡單做一張Northwind的Products表的統計報表。
(最終圖)
一、新建一張報表
二、添加數據集
添加xsd文件后,有兩種添加數據集的方式。
第一種從工具箱中添加TableAdapter,通過sql語句連接數據庫綁定數據集。
第二種添加DataTable后,手動加上需要綁定的字段,然后通過BLL層的方法返回對象綁定數據源,接下來都將采用第二種方法。
(Productid的DataType為Int32,Unitprice的DataType為Double,Unitsinstock的DataType為Int32)
三、設計報表
從工具箱中添加 表 到報表上,此處有兩行即表頭和數據,為了之后統計需要我們在組外部再添加一行。
然后在報表數據的數據集點添加數據集
接着從數據集中的字段拖放到表中的列即可綁定字段到表格中,在后來添加的那行,Unitprice那列對應的單元格中選擇表達式完成對相應字段的統計。
四、設計Web頁面
從工具箱中添加一個ReportViewer控件,點擊其右上方三角,選擇剛剛建立的那張報表。
這是頁面上會多出一個ObjectDataSource1控件是用來獲取數據的,我們手動賦值,所以就不用了,刪除它。
接下來手動綁定數據到報表,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using BLL; using Model; using Microsoft.Reporting.WebForms; public partial class Rpt : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable dt = getProducts(); ReportDataSource rds = new ReportDataSource("DataSet1_DataTable1", dt); ReportViewer1.LocalReport.DataSources.Clear(); ReportViewer1.LocalReport.DataSources.Add(rds); ReportViewer1.LocalReport.Refresh(); } } public static DataTable getProducts() { //添加DataTable表列名匹配字段 DataTable dt = new DataTable("Products"); dt.Columns.Add("Productid",typeof(Int32)); dt.Columns.Add("Productname",typeof(string)); dt.Columns.Add("Quantityperunit",typeof(string)); dt.Columns.Add("Unitprice",typeof(double)); dt.Columns.Add("Unitsinstock",typeof(Int32)); dt.Columns.Add("Categoryname",typeof(string)); //從BLL調用方法返回產品 List<Products> products = ProductsManage.GetAllProducts(); //將實體對象轉化到DataTable for (int i = 0; i < products.Count; i++) { DataRow dr = dt.NewRow(); dr["Productid"] = Convert.ToInt32(products[i].Productid); dr["Productname"] = products[i].Productname.ToString(); dr["Quantityperunit"] = products[i].Quantityperunit.ToString(); dr["Unitprice"] = Convert.ToDouble(products[i].Unitprice); dr["Unitsinstock"] = Convert.ToInt32(products[i].Unitsinstock); dr["Categoryname"] = products[i].Category.Categoryname.ToString(); dt.Rows.Add(dr); } return dt; } }
值得注意的是:我上面標出的ReportDataSource rds = new ReportDataSource("DataSet1_DataTable1", dt);必須與html中 <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_DataTable1" />對應。
如果運行后出現
在 Web 窗體上報表查看器 Web 控件需要 System.Web.UI.ScriptManager
則手動添加一個即可。