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 = ; 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

则手动添加一个即可。

 

ReportViewer动态加载数据源的更多相关文章

  1. Spring BeanPostProcessor与动态加载数据源配置

    前言: 本文旨在介绍Spring动态配置数据源的方式,即对一个DataSource的配置诸如jdbcUrl,user,password,driverClass都通过运行时指定,而非由xml静态配置定死 ...

  2. 在VC中动态加载ODBC的方法

    在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较困难的工作.而且,在实际应用中,用户往往 ...

  3. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

  4. 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。

    (转载声明出处:http://www.cnblogs.com/linguanh/) 简介:      该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源.点击事件,等核心操作, ...

  5. 使用jsTree动态加载节点

    因为项目的需要,需要做一个树状菜单,并且节点是动态加载的,也就是只要点击父节点,就会加载该节点下的子节点. 大致的效果实现如下图: 以上的实现就是通过jsTree实现的,一个基于JQuery的树状菜单 ...

  6. Unity动态加载和内存管理(三合一)

    原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...

  7. Unity3D动态加载外部资源

    最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...

  8. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)

    1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...

  9. 解决tableView中cell动态加载控件的重用问题

    解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问 ...

随机推荐

  1. 第三届蓝桥杯预赛真题_第一题_两种微生物 X 和 Y

    /* 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍). 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y. 现在已 ...

  2. javascript数组去重算法-----4

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Python的迭代器(iterator)和生成器(constructor)

    一.迭代器(iterator) 1.迭代器的概述 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器 ...

  4. Java单态模式

    Java的单态模式 Singletom 作用:保证在Java应用程序中,一个Java类只有一个实例存在:所以一般单态类会提供一个返回该类实例的方法.提供一个对对象的全局访问指针. 优点:节省内存,限制 ...

  5. SQL Server索引进阶第十一篇:索引碎片分析与解决

    相关有关索引碎片的问题,大家应该是听过不少,也许也很多的朋友已经做了与之相关的工作.那我们今天就来看看这个问题. 为了更好的说明这个问题,我们首先来普及一些背景知识. 知识普及 我们都知道,数据库中的 ...

  6. 红豆带你从零学C#系列之:初识继承与多态

    继承 现实生活当中,人类又可以根据职业分为:教师,学生,理发师,售货员 又比如飞机又有种类之分:直升飞机.客机.货机.战斗机等 在程序里面我们可能会通过创建类来描述这样的事物,比如学生类.教师类.理发 ...

  7. D - Common Subsequence

    D - Common Subsequence Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I ...

  8. JQ兼容性问题

    checkbox操作 1:设置为选中状态   $(this).prop("checked", true); 2:判断是否选中     $(this).is(":check ...

  9. Asp MVC 中处理JSON 日期类型

    注:时间有点忙,直接copy 过来的,要查看原址: http://www.developer.com/net/dealing-with-json-dates-in-asp.net-mvc.html I ...

  10. [C++]Store Credit——Google Code Jam Qualification Round Africa 2010

    Google Code Jam Qualification Round Africa 2010 的第一题,很简单. Problem You receive a credit C at a local ...