RDLC 报表参数、常量及常用表达式的使用

在报表中我们往往需要使用一些特定格式或在特定的条件下使用特定的数据,或对数据做下些处理,并且可能存在一些数据是要我们从ASP.NET程序提供的,所以这篇我们主要讲RDLC报表中如何使用参数、表达式及常用常量。

 

  1. 怎样通过ASP.NET 程序为RDLC报表提供参数

  2. 怎样使用RDLC提供的变量及常用常量

  3. 常用表达式的使用

  4. 总结

  5. 代码下载(下载)

     ASP.NET 程序为RDLC报表提供参数 

  在我们的报表中,往往需要从ASP.NET程序提供一些参数显示在报表的指定位置,第一篇中我们已经讲过怎样传递一个数据集,但是我们只需要一个值,总不能把这个值放到DataSet中来传输吧(因为DataSet本其实是由XML结成,在传递过程中需要比data本身更多的资源),所以这个时候我们就需要知道如何传递一个参数到RDLC报表。下面我们就来讲一讲。

  不知道大家还记不记得我在第一篇中的Default.aspx.cs中写的一个Button事件,如下。

 1         protected void ButtonReportGenerate_Click(object sender, EventArgs e)
 2         {
 3             List<ReportDataSource> reportDataSource = new List<ReportDataSource>();
 4             RportDataSet ds = new RportDataSet();
 5             string templatePath = string.Empty;
 6             string totalRecords = string.Empty;
 7 
 8             SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoggingConnectionString"].ConnectionString);
 9             SqlCommand command = conn.CreateCommand();
10             command.CommandType = CommandType.Text;
11             command.CommandText = "SELECT * FROM T_BC_LOGS";
12             SqlDataAdapter da = new SqlDataAdapter(command);
13             da.Fill(ds.T_BC_LOGS);
14             reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));
15 
16             //TemplateFiles
17              templatePath = "ReportTemplate/LogReport.rdlc";
18             List<ReportParameter> parameterList = new List<ReportParameter>();
19             ////Generate Report
20              GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");
21         }

  其中我定义了一个泛型变量,如下:

  List<ReportParameter> parameterList = new List<ReportParameter>();

  但是我并没有给这个变量赋任何值,我要告诉大家的就是这里变量就是为我们传递参数提供的。好,下面我们就来讲一下怎么传递这个参数。

  1. 首先我们打开ReportTemplate文件夹中的RDLC报表模板,点击报表的编辑区,然后打开Report菜单下的Report Parameters…,在Report Parameters窗口中,我们点击Add 按钮,接着我们输入这个参数的名称与类型(这个名称你要记住,因为下面的编程中要用到),如果这个参数提供的时候不一定每次都有值,那么我们则要选中 All null value的复选框,如下图所示,如果你有多个参数则以此方法添加即可。

 

  2. 我们从Visual Studio IDE左边的ToolBox中拖一个TextBox到这个报表模板的页首(在我的报表中,复杂的表头大部分都是通过TextBox来实现的,可以设计 TextBox的边框及字体等属性来设计,所以后面的内容中我不会再提如何设计复杂的报表页首),右击这个TextBox,选择Expression…,在Expression窗口中,我们选择Category中的Parameters,然后双击最右边你刚刚加的那个参数,点击确定即可。至此,对报表的设计完成了。

  3. 修改Default.aspx页面中的程序如下所示:

 1         protected void ButtonReportGenerate_Click(object sender, EventArgs e)
 2         {
 3             List<ReportDataSource> reportDataSource = new List<ReportDataSource>();
 4             RportDataSet ds = new RportDataSet();
 5             string templatePath = string.Empty;
 6             string totalRecords = string.Empty;
 7 
 8             SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoggingConnectionString"].ConnectionString);
 9             SqlCommand command = conn.CreateCommand();
10             command.CommandType = CommandType.Text;
11             command.CommandText = "SELECT * FROM T_BC_LOGS";
12             SqlDataAdapter da = new SqlDataAdapter(command);
13             da.Fill(ds.T_BC_LOGS);
14             reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));
15 
16             //TemplateFiles
17             templatePath = "ReportTemplate/LogReport.rdlc";
18             List<ReportParameter> parameterList = new List<ReportParameter>();
19             //为参数Parameter1传递This is a parameter
20             parameterList.Add(new ReportParameter("Parameter1", "This is a parameter"));
21             ////Generate Report
22             GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");
23         }

  运行结果如图所示:

      使用RDLC提供的变量及常用常量

  在RDLC报表中,有些你想得到的功能是用ASP.NET代码完成不了的,比如说这个报表总共有多少页,当前在第几页等等,这些功能我们就要借助RDLC表达式中自带的一些常量了,下面就让我们来谈谈这此常量。

  1. 显示总共页数及当前页

  a) 从Visual Studio IDE左边的ToolBox中拖两个TextBox到报表的页首。

  b) 右击第一个TextBox,选择Expression…,在Expression窗口的Category中选择Globals,然后在Item中双击选择TotalPages,这个变量就是总共多少页,为了方便我们查看,我们把在上面显示的表达式进行修改如下:

  ="Total of "+Globals!TotalPages.ToString()

  c) 按上面的加入总页的方式,右击第二个TextBox选择Expression…,然后在选择Globals,接着选择PageNumber,这就是当前的页数,同样为了方便查看,修改如下:

  =" Total of "+Globals!PageNumber.ToString()

  注意:

  刚才我们选择总页数和当前页数的时候,是不是发现除了这两个还有好几个常量,现在解释如下:

  ExecutionTime   生成报表的时间
  PageNumber   当前的页号
  ReportFolder   包含报表的文件路径
  ReportName   报表的名称
  ReportServerUrl   执行报表Server的路径(这里没有用Server,所以没有,如果用ReportService那就就存在了)
  TotalPages   总行数
  UserID   当前执行报表的人
  Language   执行报表Server的系统语言

  2. 为RDLC报表中数据行增加自动编号

  a) 为了完成这个功能,我们完成这个功能,现在我们为报表中已经存在的Talbe在最左边加一个字段叫S/N(这篇中没有讲表从哪里来,请参阅[原创] RDLC 报表系列(一) 创建一个报表)。

  b) 还记得我当时给这个表绑定了一个数据集吗?选点右击表,选择Properties,从里面拷出那个数据集的名称。

  c) 右击S/N的数据字段,选择Expression,在Expression的Category中选择Common FunctionsàMiscellaneous,然后双击右边Item中的RowNumber,在其参数中输入数据集的名称,如下所示:

  =RowNumber("RportDataSet_T_BC_LOGS")

      常用表达式的使用

  1. 连接字符

  =Fields!FirstName.Value + Fields!LastName.Value   连接两个字段在一个单元格中,并一行显示

  =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 连接两个字段在一个单元格中显示,但是换行显示

  2. If表达式使用

  =IIF(Fields!LineTotal.Value > 100, True, False) 如果成立执行True的表达式,否则执行False表达式,我可也可以写其它的表达式代替代码里的东西

  3. Count表达式使用

  =Count(Fields!DAILYCOUNT.Value,"WeldingReportDataSet_T_WelderDaily") 计算WeldingReportDataSet_T_WelderDaily数据集中DAILYCOUNT有多少行

  3. Sum表达式使用

  =Sum(Fields!DAILYCOUNT.Value,"WeldingReportDataSet_T_WelderDaily") 计算WeldingReportDataSet_T_WelderDaily数据集中DAILYCOUNT的总和

  4. Format表达式使用

  =CDate(Fields!TOPAINTDATE.Value).ToString("dd MMM yyyy") 对date的格式进行应用

     总结

  通过上面的内容,我们学习到如下内容:

  1. 从ASP.NET传递参数到RDLC报表中

  2. 掌握如何使用RDLC提供的常量;

  3. 掌握如何使用常用的表达式

时间: 2024-11-05 06:12:54

RDLC 报表参数、常量及常用表达式的使用的相关文章

JasperReport报表参数9

填充一个报表的主要输入是:报表模板,参数和数据源.本章将介绍这些参数,并在接下来的章节中,我们将介绍数据源. 参数是在报表填充操作传递给报表引擎的对象引用.参数传递有用的数据到报表引擎,它可以不通过数据源来传递的数据是有用的.如作者姓名,报告等的标题数据,可以通过参数传递. Jasper报表模板或JRXML模板可以包含零个或多个参数的元素. 参数声明 参数声明很简单,如下所示: <parameter name="exampleParameter" class="java

DevExpress的XtraReport和微软RDLC报表的使用和对比

原文:DevExpress的XtraReport和微软RDLC报表的使用和对比 我们开发程序的时候,经常会碰到一些报表,如果是Winform的报表,一般可以采用DevExpress控件组的XtraReport,或者微软的RDLC报表,当然还有一些其他的,在此不再赘述.由于本人在Winform开发中经常使用到一些报表,有时候使用XtraReport报表,有时候也使用RDLC报表,因此本篇主要介绍这两种不同类型报表的使用,以及对比它们的差异性,以便我们更好的掌握了解. 1.XtraReport报表的

RDLC报表钻取空白页问题

在修改报表查询条件时,钻取页突然空白了,百思不得其解,之前好好的,研究了一个下午和一个晚上,查资料等等,网上很多资料都是设置报表的 ConsumeConteinerWhitespace = True 以及设置BODY的大小不能大于报表的SIZE,问同事,说是报表参数过多,正准备修改成一个参数,但是在删除参数时,想到之前刚做钻取时,因为参数不对所以显示不出来,设置了允许空和允许NULL,才显示出来数据,一查,有个新增参数果然没设,设了之后立即显示出来了,大意了,这种小问题,特记下来,以后认真对待问

基于MVC+EasyUI的Web开发框架经验总结(15)--在MVC项目中使用RDLC报表

RDLC是一个不错的报表,有着比较不错的设计模式和展现效果,在我的Winform开发里面,使用RDLC也是一个比较方便操作,如可以参考文章<DevExpress的XtraReport和微软RDLC报表的使用和对比>或者<会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载>进行了解.但是基于MVC方式,如何构建和展现RDLC报表呢?本文主要介绍如何在基于MVC4+EasyUI的Web开发框架上进行RDLC的集成和使用. 1.RDLC绑定数据源 RDLC的报表设计,是使用

RDLC报表:每页显示N条记录

摘要: 提供一种方案,使分页浏览的报表每页显示固定条数记录,最后一页记录条数不足的,用空行补齐. 示例: 记录共7条,每页显示5条记录: 下载代码(vs2008,需要安装AdventureWorks数据库) 下载代码(vs2008,不需要数据库支持) 下载代码(仅rdlc报表定义文件) 原理: 由于表的分组包含“在起始处分页”和”在结束处分页”的功能,所以我们考虑先将数据分成若干个记录条数为N的组, 再启用“在结束处分页”的功能. 那么,如何分组呢?考虑记录的下标为 0,1,2,3... 的自然

grok规则常用表达式

grok规则常用表达式 ● USERNAME 或 USER 用户名,由数字.大小写及特殊字符(._-)组成的字符串 比如:1234.Bob.Alex.Wong等 ● EMAILLOCALPART 电子邮件用户名部分,首位由大小写字母组成,其他位由数字.大小写及特殊字符(_.+-=:)组成的字符串.注意,国内的QQ纯数字邮箱账号是无法匹配的,需要修改正则 比如:stone.Gary_Lu.abc-123等 ● EMAILADDRESS 电子邮件 比如:[email protected].[emai

VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表

原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表 Excel具有强大的图表显示.分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那么容易.在VSTO中,我们可以借助RDLC报表组件来满足这种需求. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RTM + Office 2010 Professional Plus Beta x64 下测试通过 注:本次数据库使用的是 SQL Se

Linq之Expression高级篇(常用表达式类型)

目录 写在前面 系列文章 变量表达式 常量表达式 条件表达式 赋值表达式 二元运算符表达式 一元运算符表达式 循环表达式 块表达式 总结 写在前面 首先回顾一下上篇文章的内容,上篇文章介绍了表达式树的解析和编译.如果忘记了,可以通过下面系列文章提供的入口进行复习.这篇文章将介绍常见的表达式类型. 常见的表达式类型都有个共同的基类Expression.创建这些类型的对象,是通过API的方式创建的(也就是Expression的静态方法),首先引入命名空间: 1 using System.Linq.E

rdlc报表 矩阵控件下的按组分页

场景: 使用rdlc开发报表,例如订单产品报表,显示多个订单,一个订单有动态生成的固定的多个产品组成,同时统计每个订单里多个产品数量总数. 数据库层面分析: 此报表属于交叉报表,例如5个订单,3个产品,总共的数据库记录应该为15条,而不是5条. 存在的技术难点: (1)动态列生成 使用Matrix矩阵控件 (2)统计每个订单里多个产品数量总数 确保每个订单的第一条数据是正确的,第二条或第三条数据为NULL都没关系 (3)控制每页显示33条记录,而不是通过默认的高度来控制分页 (4)由于是使用矩阵