logo资料库

VS2010的RDLC报表使用教程.doc

第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
资料共46页,剩余部分请下载后查看
1、为什么要使用RDLC报表(简介)
2、RDLC简单Demo
3、RDLC常用控件介绍
4.1 表格控件使用介绍
4.2 矩阵控件使用介绍
4.3 子报表控件使用介绍
4、RDLC参数介绍
5.1 报表参数处理
5.2 子报表参数处理
5、RDLC钻取功能实现
6、RDLC自定义工具条
7、设计器实现
8.1 RDLC XML分析
8.2 RDLC设计器实现
使用RDLC报表(一)
使用RDLC报表(二)
使用RDLC报表(三)
使用RDLC实用例子(分组折叠钻取跳转)
RDLC常用表达式的使用
实例
制表日期:2011 年 08 月 01 日 制表人:潘梦军 RDLC 使用总结 1、为什么要使用 RDLC 报表(简介) VS .NET 开发中,用什么进行报表设计?可能的回答是 Crystal Report,当然,必须承认 Crystal Report 的功能还是非常强大的,被 Business Object 收购以后,商业的成分也在逐渐增 加,也形成了一定规模的用户群。 Visual Studio .NET 进入 2005 版本以后,Crystal Report 与 IDE 的结合更“紧密”了,至少 我们看不到那个讨厌的注册窗口了。但是,Microsoft 似乎并不容忍在自己的超级工具中竟然 没有报表工具,于是 Report Viewer Control 出现了,我把它的报表称为 RDLC 报表。 在 VS .NET 2005 之前,SQL Server Reporting Services 中已经提供了一种被称为报表定义语 言(Report Definition Language, RDL)的语言;在 VS .NET 2005 中,Microsoft 提供了针对这 种报表的设计器,并提供了在 WinForm 和 WebForm 中使用这种报表的能力。Microsoft 将这 种报表的后缀定为 RDLC,RDL 仍然是 Report Definition Language 的缩写,那么 C 代表什么 呢?C 代表 Client-side processing,凸显了它的客户端处理能力。 这种报表的易用性和可定制性让我们完全有理由放弃 Crystal Report,让我们来看看它的强 大功能吧: 1) 简单易用的控件,特别是 Table 控件,非常方便字段在报表上的排列; 2) 灵活的可定制性,用 XML 来描述一个报表相关的一切,不用说了吧; 3) 高度可编程性,在你的项目中,甚至不需要有一个报表文件,通过代码就可以实现报 表生成、预览和打印等一系列操作; 4) 支持 DrillThrough 数据钻取功能; 5) 导出的 Excel 文件格式非常完美,而且并不需要安装 Excel; 6) 数据源处理极其方便,开发人员可以自己接管数据库连接、取数,然后将数据结果赋 值给 RDLC 的数据集即可。 7) 展示和数据分离,程序员更是可以编写一个 RDLC 设计器交有用户使用,这样用户 就可以自行设计 RDLC 报表格式,程序员只负责定制数据接口即可。 RDLC MSDN:http://msdn.microsoft.com/zh-cn/library/ms251671(VS.80).aspx 2、RDLC 简单 Demo 本文所有 RDLC 例子都是基于 VS2005 C#,所有 ReportViewer 的处理模式都是 Local 模式。 本报表 Demo 显示上文中提到的 RDLC 手册各节内容,下述为 Demo 的详细 steps。 1) 新建项目,选择 Windows 应用程序项目类型,输入工程名称 RDLCDev; 2) 修改 Form1 窗体名称为 FrmRdlcUserGuide,在工具箱—>数据 Tab 选项卡中选择 ReportViewer 控 件 , 将 其 拖 入 到 FrmRdlcUserGuide , 默 认 命 名 为 reportViewer1 , 调 整 ReportViewer 控件的大小和布局; 3) 在解决方案资源管理器中选择 RDLCDev 工程,鼠标右击 RDLCDev 工程,添加新建 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 1/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 项,在添加新项模板中选择“报表”,取名为 rdlcuserguide.rdlc,单击添加按钮,然后在解决 方案资源管理器中RDLCDev 工程下会增加一个rdlcuderguide.rdlc 文件,并且会自动打开RDLC 设计器; 4) 在 RDLC 设计器中添加 11 个 TextBox 控件,1 个作为标题,其余 10 个作为 RDLC 使 用 手 册 具 体 内 容 , 对 每 个 TextBox 控 件 进 行 TextAlign 、Color 、BorderStyle 、Font 和 TextDecoration 等相关属性设置,设计完毕之后,大致如下图所示。 5) 在 FrmRdlcUserGuide 窗体 Load 事件中添加下述代码 private void Form1_Load(object sender, EventArgs e) { } this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local; this.reportViewer1.LocalReport.ReportPath = "rdlcuserguide.rdlc"; this.reportViewer1.RefreshReport(); 6) 编译、运行 RDLCDev 工程,运行结果大致如下图所示。 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 2/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 3、RDLC 常用控件介绍 RDLC 设计工具箱上总共有 9 种控件:文本框(TextBox)、折线(Line)、表(Table)、矩阵 (Matrix)、矩形(Rectangle)、列表(List)、子报表(SubReport)、图表控件(Chart)、图像控件(Image)。 下图 ctlsDemo.rdlc 设计器所示为所有控件的设计演示。 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 3/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 1) 由于表格控件、矩阵控件、列表控件和图表控件必须填充数据集,因此把所有控件布 局完毕之后,创建一个数据集。解决方案资源管理器中,选中 RDLCDev 工程,右击添加新建 项,在新建项类型模板里选择“数据集”,取名“ctlsDemo.xsd”,单击“添加”。 ctlsDemo.xsd 添加完毕之后,在解决方案资源管理器中会增加一个 ctlsDemo.xsd 文件,并 前 VS IDE 会自动打开 ctlsDemo.xsd 设计页面。在设计页面中右击,添加 Datatable,将其命名 为 vSales,该表描述的是产品的销售额信息,为 vSales 表添加列,列信息如下: ProdCat SubCat OrderYear OrderQtr Sales System.String System.String System.Int32 System.String System.Double 2) 文本框控件、折线控件、矩形控件使用相对简单,这里不细说; 3) Image 控件,现在 RDLC 设计器模式下,选择“报表”菜单,“嵌入图像”,在“嵌 入图像”对话框中,载入一个本地图像文件即可。然后设置 Image 控件的 Source 属性为 Embedded,设置 Value 属性为刚才处理的嵌入图像即可。当然还有别的方式可以显示图像, 大家可以 Google 一下,关键字为 RDLC、嵌入图像; 4) 图表控件,使用图表控件的一个关键是要设置好图表属性页面中的数据 TAB 页相关 内容。主要有值、类别组和序列组定义,大家可以参考 Demo; 5) 表格控件、矩阵控件和子报表控件,在后续内容中会详细介绍; 4.1 表格控件使用介绍 1) Table 控件是 RDLC 报表显示数据的一个核心控件,关于 Table 控件,在微软提供的 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 4/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 RDLC 规范里有详细的介绍,其大致内容可以用下述的一张类 UML 图来表示; 2) 新建报表文件,命名为 ctlTableDemo.rdlc; 3) 在 ctlTableDemo.rdlc 设计器中,拖入 Table 控件,默认情况下是 3 行 3 列,其中第 1 行为表头行(我们理解为列标题行),第二行为详细信息行(我们理解为报表内容展示区域), 第三行为表尾行(我们理解为汇总区域)。可以整行选中,然后右击鼠标添加行或者删除行, 也可以整列选中,然后右击鼠标添加或者删除列。上文中提到的数据集合有 5 个字段,因此需 要 5 列来显示,为此需要增加两列。 4) 在数据源窗口中(如果没有显示的话,选择【数据】菜单下的【显示数据源】即可) 选择上文中创建的 ctlsDemo.xsd 数据集,将 ProdCat、SubCat、OrderYear 、OrderQtr 和 Sales 分别拖入到 Table 控件的详细信息行的不同列中去。 5) 设置标题行文字显示都居中,Sales 的内容显示右对齐,ProdCat、SubCat、OrderYear、 OrderQtr 和 Sales 文本框的字体颜色全部设置成 Blue,Sales 文本框由于显示的内容为销售额, 因此需设置数字显示格式,小数位数。鼠标右击 Sales 文本框,选择【属性】,在文本框属性 窗口中,选择格式 Tab 页,在格式代码处,选择数字 1,234.00 格式即可,选择完毕之后该文 本框的数字就以逗号千分位作为分割符,保留 2 位小数显示,效果如下图所示。 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 5/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 6) 插入一个组实现分组统计功能。选中整行,鼠标右击,选择【插入组】,弹出分组和 排序属性对话框,设置分组名称、分组方式、是否显示组头或者组尾等属性即可,本文分组设 置如下: ·分组名称:table1_Group1 ·分组表达式:=Fields!ProdCat.Value;=Fields!SubCat.Value;=Fields!OrderYear.Value,实现 产品年度销售额汇总统计功能。 ·不显示组头、显示组尾(至于组头、组尾是个什么样的东西,大家只要动手试一下就一目 了然了) ·在 textbox15 中输入汉字“合计”,在 textbox16 文本框中输入合计表达式 =Sum(CDbl(Fields!Sales.Value)),设置完之后效果如下图所示。 7) 新建窗体 FrmCtlTableDemo,然后在该窗体上添加 ReportViewer 控件,在窗体 FrmCtlTableDemo 代码窗口里 输入以下代码: private void FrmCtlTableDemo_Load(object sender, EventArgs e) { this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local; this.reportViewer1.LocalReport.ReportPath = @"rdlc\ctlTableDemo.rdlc"; // reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("ctlsDemo_vSales", LoadData())); // 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 6/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 this.reportViewer1.RefreshReport(); } private DataTable LoadData() { } DataSet dataSet = new DataSet(); dataSet.ReadXml(@"data\ctlsDemo.xml"); return dataSet.Tables[0]; 8) 运行效果如下图所示 4.2 矩阵控件使用介绍 1) 矩阵控件主要用于显示 CrossTable 之类的报表,因此其列数可以是 Static 的,也可以 是 Dynamic 并且 Can grow 的,关于矩阵控件,在 RDLC 协议规范里也有介绍,其大致内容可 以用下图表示。 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 7/46
制表日期:2011 年 08 月 01 日 制表人:潘梦军 2) 新建报表文件,命名为 ctlMatrixDemo.rdlc; 3) 在 ctlMatrixDemo.rdlc 设计器中,拖入 Matrix 控件,默认情况下是 2 行 2 列,左上角 单元格为空白区域(通常用来显示报表摘要信息如产品/年度等),右上单元格显示为“列”, 单击此处可以增加列分组,左下单元格显示为“行”,单击此处可以添加行分组,右下单元格 显示为“数据”,单击此处可以添加静态行、静态列。 4) 在矩阵左上角单元格空白区域拖入矩形控件,然后在该矩形控件中拖入一个折线控件 和两个文本框控件,折线当做矩形的对角线,两个文本框内容为产品和年度分布在折线两侧。 5) 增 加 两 个 行 分 组 , 分 别 为 matrix1_RowGroup1 和 matrix1_RowGroup2 , matrix1_RowGroup1 的 表 达 式 为 =Fields!ProdCat.Value , matrix1_RowGroup2 的 表 达 式 为 =Fields!SubCat.Value。 6) 增 加 两 个 列 分 组 , 分 别 为 matrix1_ColumnGroup1 何 matrix1_ColumnGroup2 , matrix1_ColumnGroup1 的表达式为=Fields!OrderYear.Value,matrix1_ColumnGroup2 的表达式 为=Fields!OrderQtr.Value。 7) 在“数据”单元格中编辑表达式=Sum(CDbl(Fields!Sales.Value)) 8) 设计完之后,效果如下图所示; 地址:广东省中山市石岐区东明路 23 号 TEL(0760)-8713353 FAX(0760)-8713354 8/46
分享到:
收藏