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. Android NOTE

    一些小的点就记在这里吧…… MultiDex打包时zip错误 我遇到的是 Execution failed for task ':excelSior:packageAllDebugClassesFor ...

  2. SQL Server save transaction

    准备: create table Nums(X int); 目的:只向表中插入一行. --------------------------------------------------------- ...

  3. zoj 3665 Yukari's Birthday(枚举+二分)

    Yukari's Birthday Time Limit: 2 Seconds       Memory Limit: 32768 KB Today is Yukari's n-th birthday ...

  4. xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用

    代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView ...

  5. 性能优化工具---top

    作用: 实时显示linux下各个进程的资源占用情况 参数: -d :后面可以接秒数,就是整个程序画面更新的秒数.预设是 5 秒: -p :指定某些个 PID 来进行观察监测而已. -b :以批次的方式 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(四)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. 【原创】重绘winform的GroupBox

    功能:重绘winform的GroupBox,以便调整边框颜色和边框宽度 using System; using System.Collections.Generic; using System.Com ...

  8. WebService测试工具SoapUI

    尊重原著作:本文转载自http://gqsunrise.iteye.com/blog/1958480 1. 简介 SoapUI是用java开发的测试web service的工具. 2. 安装 2.1. ...

  9. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )

    dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...

  10. 列求key出现的频率

    1 cat mc.log | grep LOGIN_GET | awk '{print $9}' | sort | uniq -c