[转]"RDLC"报表-参数传递及主从报表
本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html
今天继续学习RDLC报表的“参数传递”及“主从报表”
一、先创建DataSet,如下图:

二、创建一个报表rptDEPT.rdlc,显示部门T_DPET的数据

三、嵌入Default.aspx中,写在Default.aspx.cs中写些基本代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
using System;using System.Data;using Microsoft.Reporting.WebForms;namespace ReportSample{ public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.ReportViewer1.LocalReport.ReportPath = "rptDEPT.rdlc"; this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DS_DEPT", GetDeptData())); } } DataTable GetDeptData() { DataTable dt = new DataTable(); dt.Columns.Add("DEPTNO", typeof(string)); dt.Columns.Add("DEPTNAME", typeof(string)); dt.Rows.Add("01", "办公室"); dt.Rows.Add("02", "技术部"); dt.Rows.Add("03", "销售部"); dt.Rows.Add("04", "客服部"); return dt; } }} |
运行效果:

OK,下面才是真正开始:
很多情况下(比如团队开发),报表的数据源DataTable通常是由其它人写好的,有些甚至不允许再做修改,报表开发人员只能被动的接收数据,但是报表上未必需要显示全部数据,以上面的报表为例,如果我们只需要显示"02技术部“的数据,如何处理?
这时报表参数就派上用场了:
四、添加报表参数
在Report Data面板中,选中Parameters,右击-->Add Parameter

为参数取名为DeptNo,并做一些设置,如下图

五、为报表的Table添加Filters条件
上一步添加的参数需要与报表上的Table建立联系,否则发挥不了作用。幸好每个Table都可以设置Filters表达式,来对数据进行筛选,见下图:

六、在cs代码中动态传入参数
修改Default.aspx.cs的代码,在运行时动态添加参数
|
1
2
3
4
5
6
7
8
9
10
|
protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { this.ReportViewer1.LocalReport.ReportPath = "rptDEPT.rdlc"; this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DS_DEPT", GetDeptData())); //动态传入参数 this.ReportViewer1.LocalReport.SetParameters(new ReportParameter("DeptNo", "02")); }} |
最终运行结果:

很多报表中,数据的来源往往不止一个DataTable,下面我们模拟一个简单的主从报表,主报表即为上面的rptDEPT(显示部门信息),子报表(也称从报表)显示部门下的员工清单(命名为rptEMP.rdlc)
七、创建员工报表rptEMP.rdlc
布局如下:

同样,我们也为子报表添加一个参数DeptNo,同时还要为子报表的Table设置Filters条件(条件的值在本例中跟主报表相同,同样都是DeptNo=@DeptNo)
八、在rptDEPT.rdlc中插入子报表rptEMP.rdlc
子报表控件允许在一个报表中再插入另一个报表,如下图:

然后在子报表上右击,调出子报表属性

设置加载哪个子报表

同时增加一个子报表参数

注:这里增加一个跟主报表同名的参数DeptNo,同时设置其值为主报表rptDEPT的参数@DeptNo
九、修改Default.aspx.cs代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using System;using System.Data;using Microsoft.Reporting.WebForms;namespace ReportSample{ public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //定义子报表处理方法 this.ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); this.ReportViewer1.LocalReport.ReportPath = "rptDEPT.rdlc"; this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DS_DEPT", GetDeptData())); //动态传入参数 this.ReportViewer1.LocalReport.SetParameters(new ReportParameter("DeptNo", "02")); } } void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) { e.DataSources.Add(new ReportDataSource("DS_EMP", GetEMPData())); } DataTable GetDeptData() { DataTable dt = new DataTable(); dt.Columns.Add("DEPTNO", typeof(string)); dt.Columns.Add("DEPTNAME", typeof(string)); dt.Rows.Add("01", "办公室"); dt.Rows.Add("02", "技术部"); dt.Rows.Add("03", "销售部"); dt.Rows.Add("04", "客服部"); return dt; } DataTable GetEMPData() { DataTable dt = new DataTable(); dt.Columns.Add("EMPNO", typeof(string)); dt.Columns.Add("EMPNAME", typeof(string)); dt.Columns.Add("DEPTNO", typeof(string)); dt.Rows.Add("001", "杨过","02"); dt.Rows.Add("002", "令狐冲", "02"); dt.Rows.Add("003", "黄蓉", "01"); dt.Rows.Add("004", "小师妹", "03"); dt.Rows.Add("005", "赵敏", "04"); return dt; } }} |
最终运行效果:

想想发生了什么?
主报表rptDept与子报表rptEMP设置了相同的参数以及过滤条件,代码给主报表rptDept传递了参数DeptNo后,主报表rptDept又把参数值传递给子报表rptEMP,最终二个报表都实现了数据筛选.
[转]"RDLC"报表-参数传递及主从报表的更多相关文章
- RDLC 主从报表筛选
今天继续学习RDLC报表的“参数传递”及“主从报表” 一.先创建DataSet,如下图: 二.创建一个报表rptDEPT.rdlc,显示部门T_DPET的数据 三.嵌入Default.aspx中,写在 ...
- RDLC报表的相关技巧二(主从报表)
为了广泛支持客户端,系统框架运行在.Net Framework 4.0之上,Report viewer的版本也限制在11.0.3366.16. 使用NUGET安装Microsoft.ReportVie ...
- RDLC系列之二 子报表
本文实现简单的子报表 一.效果图
- [原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...
- JasperReport子报表参数传递
子报表参数传递 下图的参数名称可以自定义 再子报表新增一个同名称的参数即可
- iReport 4.1 报表制作,子报表,实例解析
开发使用步骤(iReport 4.1.1) (个人总结,如有问题请留言,另外知道table控件用法的给我留言或者发邮件谢谢.Email:jiazx0107@163.com) 目录 1. 开发 ...
- 葡萄城报表介绍:Web 报表
Web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和 HTTP 的.全球性的.动态交互的.跨平台的分布式图形信息系统.Web 报表是以 Web 作为信息展示平台,可以 ...
- [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章 创建一个分组报表 1. 建立数据模型 数据模型用于 ...
- 【Reporting Services 报表开发】— 交互式报表
我们知道,界面是人与系统间的对话方式,当使用者面对的是冷冰冰的界面,不但会造成使用者对于系统的热情减低,也会因为不便而产生诸多抱怨.尤其像报表时企业内几乎每日都会使用到的工具,因此,如何让使用者可以再 ...
随机推荐
- if判断,while循环,for循环
if判断 if判断其实就是让计算机模拟人的判断 if if 条件: 代码1 代码2 代码3 ... # 代码块(同一缩进级别的代码,例如代码1.代码2和代码3是相同缩进的代码,这三个代码组合在一起就是 ...
- windows设置右键菜单
1. 打开注册表,(win + R,输入regedit) 2. 在 HKEY_CLASSES_ROOT\Directory\Background\shell 中,新建项:如(cmder),在 cmde ...
- Vue(八)全局变量和全局方法
一.在main.js同级目录建立一个common.js文件 // 全局变量 const globalObj = {}; // 定义公共变量 globalObj.name = '小明'; // 定义公共 ...
- .NET 大数据量并发解决方案
https://www.cnblogs.com/wxlevel/p/7484738.html
- 浅谈 extern "C"
今天上课实在无聊,就看了看 extern "C" 的作用,看了以后对它有了一点点理解,在这里给大家分享一下(本菜鸡水平有限,如若有说得不对的地方,还望大家指出). extern 关 ...
- 第十三节:pandas之groupby()分组
1.Series()对象分组 1.1.单级索引 1.2.多级索引 2.DataFrame()对象分组 3.获取一个分组,遍历分组,filter过滤.
- asp.net 跨域问题
asp.net 跨域问题 解决方案1: public void ProcessRequest(HttpContext context) { //解决跨域问题 context.Response.Clea ...
- Huawei-R&S-网络工程师实验笔记20190609-VLAN划分综合(Hybrid端口)
>Huawei-R&S-网络工程师实验笔记20190609-VLAN划分综合(Hybrid端口) >>实验开始,先上拓扑图参考: >>>实验目标:分别实现主 ...
- everyday two problems / 3.11 - 3.17
7日共14题,因为3.14两题相同,所以实际总共13题 13道题分为难易两部分,没有按照时间顺序排列题目 A.易: 1.覆盖数字的数量 题意: 给出一段从A - B的区间S(A,B为整数) 这段区间内 ...
- Ext.Ajax.request方法 参数
json数据服务器回传的方法. 在api总指出回传的格式{success;true,data:{clientName: "Fred. Olsen Lines", portOfL ...