ReportViewer和 rdlc报表使用小记
最近使用rdlc报表,由于之前没用过,所以遇到了不少小坎坷,固特别记录下以方便日后自己回顾和后来人。
刚开始用的时候觉得这个东西特别扭,后来发现琢磨一些时间后发现它其实挺不错的,支持的表格形式也很多,不过我只用过表和拆线表,下面会介绍一下这两个表的基本用法,如有不是之处,还请赐教。
一、简介
ReportViewer和 rdlcr报表结合使用大致方式如下:
1、在窗体中拖放一个ReportViewer控件。
2、在程序中添加一个rdlc报表。
3、为报表添加报表项并绑定数据源。
4、使用ReportViewer加载rdlc报表添加数据,设置显示格式。
前两个没什么好说的。第4步也比较容易,网上有一些介绍。第3步是最不好做的(至少笔者在初次接触时候受挫最多是在这一步上)。所以下面从第三步开始介绍。
二、详细介绍
1、为报表添加报表项之表格
(1)新建报表之后应该是如下的样子
(2)在左侧工具栏选择表拖到报表设计界面上,这时会出现“数据集属性”,如果当前项目中没有数据源,同时也会出现“数据源向导”对话框。如下
(3)添加数据源。可以选择图中的4种形式,笔者用的“对象”,所以这里也选择对象,单击之后出会出现如下对话框
说明:这里的“对象”可以是任何C#支持的。这里笔者新建一个简单的类。
(4)单击“完成”之后返回“数据集属性”对话框,会是如下的样子
(5)选择好“数据源”和“数据集”后“确定”。
(6)指向单元格时,单元格右上角会出现一个图标单击图标选择这个选择单元格要绑定的字段。如下
绑定完字段后这个简单的报表就完成了,当然rdlc还支持一些复杂的设置,例如:对数据分组,运行一些简单的表达式。这些在此先不作介绍了。
2、为报表添加报表项之图表(拆线图)
拆线图的用法中从添加图表到选择数据集都是相同的,这里就不多说了,主要讲一下绑定字段的。如下图所示
3、为ReportViewer加载报表并绑定数据
这个块比较简单,而且表格和图表的绑定代码是一样的,所以看代码就可以了,如下:
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 this.rptTestTable.RefreshReport(); 4 5 //////////////////////////// 6 //声明一个数据集合用以定义报表数据源 7 //报表支持的数据集合应该有很多种,不这笔者只用过ArrayList 8 System.Collections.ArrayList listTable = new System.Collections.ArrayList(); 9 //这里选择为list添加一些数据 10 Random random = new Random(); 11 for (int i = 0; i < 5; i++) 12 { 13 for (int j = 0; j < 5; j++) 14 { 15 DataModel model = new DataModel(); 16 model.ID = (i + 1).ToString(); 17 model.DataValue = random.Next(1, 200).ToString(); 18 model.Time = DateTime.Now.AddHours(j).ToShortTimeString(); 19 listTable.Add(model); 20 } 21 } 22 23 //下面是重点部分:绑定表数据 24 //这下这个的命名空间Microsoft.Reporting.WinForms. 25 //定义数据源,这里用到前说的数据集名字“dsTest”,这个名字比须和报表时添加的一样 26 ReportDataSource sourceTable = new ReportDataSource("dsTest", listTable); 27 this.rptTestTable.Clear(); //清空ReportView的 28 this.rptTestTable.LocalReport.ReportPath = @"..\..\rptTestTable.rdlc"; //设置报表路径 29 this.rptTestTable.LocalReport.DataSources.Add(sourceTable); //添加数据源 30 this.rptTestTable.SetDisplayMode(DisplayMode.PrintLayout); //设置显示方式 31 this.rptTestTable.ZoomMode = ZoomMode.PageWidth; //设置报表的绽放方式 32 this.rptTestTable.RefreshReport(); //刷新报表 33 //至此运行程序就可以看到结果了 34 35 //下面绑定图表数据和中上是基本一样 36 ReportDataSource sourceCurve = new ReportDataSource("dsCurve", listTable); 37 this.rptTestCurve.Clear(); 38 this.rptTestCurve.LocalReport.ReportPath = @"..\..\rptTestCurve.rdlc"; 39 this.rptTestCurve.LocalReport.DataSources.Add(sourceCurve); 40 this.rptTestCurve.SetDisplayMode(DisplayMode.PrintLayout); 41 this.rptTestCurve.ZoomMode = ZoomMode.PageWidth; 42 this.rptTestCurve.RefreshReport(); 43 //至此运行程序就可以看到结果了 44 }
4、结果,如下
到此,整个报表完成。
虽然是完成了,但是上面的报表可以大家会发现一些问题。比如表中的数据ID项有重复的,但在实际应用中这样的数据是不友好的,至于要怎样完善报表请看下回。