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 = ; 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动态加载数据源的更多相关文章
- Spring BeanPostProcessor与动态加载数据源配置
前言: 本文旨在介绍Spring动态配置数据源的方式,即对一个DataSource的配置诸如jdbcUrl,user,password,driverClass都通过运行时指定,而非由xml静态配置定死 ...
- 在VC中动态加载ODBC的方法
在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较困难的工作.而且,在实际应用中,用户往往 ...
- 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...
- 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。
(转载声明出处:http://www.cnblogs.com/linguanh/) 简介: 该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源.点击事件,等核心操作, ...
- 使用jsTree动态加载节点
因为项目的需要,需要做一个树状菜单,并且节点是动态加载的,也就是只要点击父节点,就会加载该节点下的子节点. 大致的效果实现如下图: 以上的实现就是通过jsTree实现的,一个基于JQuery的树状菜单 ...
- Unity动态加载和内存管理(三合一)
原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...
- Unity3D动态加载外部资源
最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...
- ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...
- 解决tableView中cell动态加载控件的重用问题
解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问 ...
随机推荐
- PhotoShop-CS4使用-----如何对psd进行简单切图
一.如何快速截图 1.如果图片为psd样式 2.要用放大器放大该图,选择放大器,放大后如图 3.开始切图 以其中一个为例,选中你所要选择切的图片 4. 选中后 5.选择文件---新建 6.此 ...
- JS---DOM概述
DOM DOM:文档对象模型document object model DOM三层模型: DOM1:将HTML文档封装成对象 DOM2:将XML文档封装成对象 DOM3:将XML文档封装成对象 DOM ...
- oracle任务计划debug
crontab -eno crontab for root - using an empty onecrontab: installing new crontab"/tmp/crontab. ...
- 【转】Python3.x移除了callable内建函数
原文地址:http://www.cnblogs.com/elvisxu/archive/2010/10/26/1861958.html 最近学习Python的时候,在Python3下跑<Dive ...
- Hat's Fibonacci(大数,好)
Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 让 collabtive-11 支持中文
collabtive, 不错的项目管理工具, 将在新项目中使用之; 但在默认安装 collabtive-11 之后 发现在里面输入中文后会出错, 网上找不了少资料但对 11这版本的中文支持的修改不起不 ...
- 文档onload处理程序
//第一种方式是注册onload事件处理代码, //onload事件会在页面或图像加载完成后立即发生.这意味着onload事件的执行时间是在 //document对象和document对象所关联的所有 ...
- 栈的实现 -- 数据结构与算法的javascript描述 第四章
栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...
- sass 语法实例
sass基本语法 1.定义一个变量,变量定义以$开头,以冒号分隔开. $blue:#1875e7; div{ color:$blue; } 编译之后的css代码: div { color: #1875 ...
- UCML破解
最近一直加班,好久没更新了.无良的产品经理一直催着修改功能,本想把活带回家做..结果...公司就一个UCML的加密狗...闹心....想办法破解: 1.狗复制,这个没搞过,某宝上有帮忙复制的,联系了一 ...