"RDLC"报表-参数传递及主从报表
今天继续学习RDLC报表的“参数传递”及“主从报表”
一、先创建DataSet,如下图:
二、创建一个报表rptDEPT.rdlc,显示部门T_DPET的数据
三、嵌入Default.aspx中,写在Default.aspx.cs中写些基本代码
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的代码,在运行时动态添加参数
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代码
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,最终二个报表都实现了数据筛选.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅析php怎么实现爬取数据原理
- 在 Laravel 中动态隐藏 API 字段的方法
- php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
- Thinkphp 5.0实现微信企业付款到零钱
- 实现php删除链表中重复的结点
- YII分模块加载路由的实现办法
- ThinkPHP5.0框架实现切换数据库的方法分析
- php微信公众号开发之微信企业付款给个人
- tp5框架的增删改查操作示例
- PHP使用函数用法详解
- 微信企业转账之入口类分装php代码
- 多个Laravel项目怎么共用migrations详解
- layui数据表格自定义每页条数limit设置
- Laravel 集成微信用户登录和绑定的实现
- PHP实现微信对账单处理