C#的rdlc报表分组汇总学习

您所在的位置:网站首页 怎么分组名称对应 C#的rdlc报表分组汇总学习

C#的rdlc报表分组汇总学习

2024-05-31 06:07| 来源: 网络整理| 查看: 265

介绍

最近项目中要用到报表的分组显示,觉得rdlc报表功能比较强大,就尝试用它来实现一下。实现方式也是有很多种,下面一一介绍。

创建分组后的数据库表

自己计算相对麻烦些,可以在数据库先创建一张表每班汇总信息(EveryTotalInfo),然后创建一个与该表对应的数据集xxx.xsd文件,在数据集中添加该表需要展示的哪些字段(注意字段类型必须与数据库中的一致): 数据集表 下面的适配器中添加一个带时间参数(@getTime)的获取方法,注意类型是日期时间类型(DateTime): 参数类型 然后打开rdlc文件,在“报表数据”页面新建数据集: 新建数据集 数据源类型选择数据库: 选择数据库 数据库模型选择: 模型选择 在选择数据库对象时,把我们新创建的表EveryTotalInfo选中: 表选择 点击完成后,会生成名为“DataSet1”(名字可以自己改)的数据集,属性如下: 属性 在“工具箱”页面拖入一个“表”控件: 插入表 这时表文本里面就可以添加数据库对应表的字段了: 显示对应字段 最后表的样式如下图所示: 完整表结构 我们代码中先计算好分组后的数据,然后插入到EveryTotalInfo表中,要显示的时候,只需给EveryTotalInfoTableAdapter适配器传入表集合和参数即可: this.everyTotalInfoTableAdapter.Fill(byGsDataSet1.EveryTotalInfo, time); this.reportViewer1.RefreshReport(); 这里的time就是之前定义的DateTime类型的@getTime参数,其作为查询条件,展示表中的数据,下面是展示的结果: 展示样式1 看到这里,实际上数据库中EveryTotalInfo表只是起到中间存放的作用,那么我们可不可以不创建表,直接代码中计算后添加到数据集当中呢?答案是肯定的。下面来介绍第二种方法。

不使用数据库表数据展示

不需要先在数据库中建表,直接在数据集xxx.xsd文件中添加展示字段: 新建数据集 和刚才一样,在rlcd文件中关联数据集,做好展示页面: 报表展示结构 那么代码中如何更新这个数据集的内容呢?实际上就是取代这个与rlcd关联的数据库(比如名为ByGsDataSet2):

// 创建新数据表 ByGsDataSet2 ds = new ByGsDataSet2(); … // 有多少张卡添加多少行数据 for (int i = 0; i < cards.Count; i++) { DataRow newRow = ds.CardStatis.NewRow(); newRow["CardNumber"] = cardNum; … ds.CardStatis.Rows.Add(newRow); } … Microsoft.Reporting.WinForms.ReportDataSource dataSource = new Microsoft.Reporting.WinForms.ReportDataSource("DataSet3", ds.Tables["CardStatis"]); if (this.reportViewer1.LocalReport.DataSources.Count > 1) // 重新添加数据 this.reportViewer1.LocalReport.DataSources.RemoveAt(1); this.reportViewer1.LocalReport.DataSources.Add(dataSource);

在添加数据集的时候,要注意“重新添加数据”的代码,这是判断数据集是否已经存在了,如果存在就先移除再添加。如果没有这行代码,第一次展示时没问题,如果数据变动后重新计算再添加就会出错的。 最后展示结果如下: 展示样式2

使用rdlc自带分组功能

在要分组的行上右键选择“添加组”->“父组…”: 添加父组 然后添加分组依据的表字段(这里以加气类型为依据): 分组依据 组内详细信息里面也需要有个排列顺序,这里按枪号排序,选中刚才的父组行,右键“添加组”->“子组…”: 添加子组 然后添加分组依据的表字段(这里选择枪号对于的数据库字段): 分组依据 我们要按照枪号由小到大进行排序显示的话,右键报表,选择“Tablix属性”: 表属性 然后选中排序依据的字段,顺序是从A到Z: 排序 这样运行报表效果: 展示样式3 可以看到展示数据已经按照不同的品类进行分组显示了,这里只有个总计,如果我们还需要在组内进行小计该怎么办呢? 要在组内进行小计,需要右键在组内添加行: 插入组内行 然后写上汇总公式:=Sum(Fields!FinishTotal.Value-Fields!StartTotal.Value) 小计公式 注意最后总计的行一定要放在组外,最终样式如下: 最终样式 再运行一下程序看效果: 展示样式4 这下组内小计和组外总计就全有了

不使用数据库表数据分组

如果自己计算的数据集,也需要添加分组怎么办呢?比如刚才的“员工售气统计表”。首先在数据集xxx.xsd文件中添加分组依据字段(按品类): 数据集增加字段 然后在rdlc文件中添加展示内容: 展示报表 没有刚添加的“GasType”字段怎么办,可以在“报表数据”页面刷新一下对应的数据集: 数据集刷新 如果还不行,就来强硬的,修改rdlc源代码,在对应的数据集名称下直接添加新插入的字段: 手动修改 这时再重新打开rdlc文件,就可以看到新添加的字段了: 新加字段出现 这时展示的报表并没有分组: 未分组展示 分组操作跟上面讲的一样,右键选择“添加组”->“父组…”,这次分组依据选择卡号: 增加父组 再运行显示如下: 分组显示 问题是卡号和名字肯定是一一对应的,卡号分组了,名字就没必要再重复显示了。在品类行上再次添加行父组: 再增加父组 这次分组依据选择姓名,组效果如下图: 组效果图 再次运行后: 分组显示 这次卡号和名字都唯一的,只是文字不居中啊,强迫症没办法,在rdlc文本框中右键“文本框属性”: 文本属性 在对齐项中,看到水平是居中的,把垂直也改为“垂直居中”: 选择居中对齐 把分组展示的文本框都这样修改后,再次运行: 对齐显示 这次看着舒服多了。。。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3