ReportViewer動態加載數據源


  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

則手動添加一個即可。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM