WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源
开篇
本篇文章主要是帮助刚开始接触CrystalReport报表的新手提供一个循序渐进的教程。该教程主要分为三个部分1)CrystalReport的基本使用方法;2)使用CrystalReport对数据进行分组求和;3)CrystalReport如何使用自定义的数据源(如内存中的DataTable表)三个方面来写。相信看懂了这个教程之后,对于自己项目中的实现报表这一功能,应该就能轻松的应对了。
一 CrystalReport模板的制作及显示
A模板的制作
1、右键【项目属性】添加一个水晶报表(在vs中需要安装CrystalReport模块,不同vs版本下载不同的CrystalReport版本:CrystalReport下载链接:http://scn.sap.com/docs/DOC-7824)
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170104190-116964434.png)
2、添加报表的设计界面如下:一个报表包括(报表头,页眉,详细资料,报表尾,页眉)5个基本部分。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170130955-166523704.png)
3、现在我们需要给新建的报表添加一个数据源,右键左边的【数据库字段】选择相应的数据源,进行绑定。我这里选择的是sqlserver数据库。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170213940-410798999.png)
4、输入数据库的登录信息,然后选择需要绑定的数据库表,除了绑定数据表之外,还可以绑定sql语句查询的结果,以及存储过程和视图,下面给出绑定数据库表格,和绑定sql查询。
1)绑定数据库表格
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170310737-1846698431.png)
2)点击连接下面的【添加命令】绑定sql语句。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170349362-1935572379.png)
5、绑定数据库之后在报表左侧的【字段管理器】中就会出现该表以及sql查询结果的的相应表头字段。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170457752-257205271.png)
6、把相应的字段在报表视图中进行布局。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170523143-1532075261.png)
到此水晶报表的模板已经做好了。注意:页眉中的userName,courseName,score是可以更改。
B模板的显示
1、首先在窗体上拖一个CrystalReportView控件作为显示报表模板。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170555502-1046066280.png)
2、在form_load事件里面写如下代码:
CrystalReport1 cr = new CrystalReport1();//实例化一个报表模板 this.crystalReportViewer1.ReportSource = cr;//为报表显示控件设置数据源
3、运行
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170758455-1290860759.png)
报表设计点丑,但是你可以根基自己的风格进行排版设计,如字体,大小,颜色等啦。
二 CrystalReport分组统计
我们在第一部分已经实现了每个同学成绩的报表输出,接下我们需要对每个同学进行分组统计,求每个同学的平均成绩。
我们在第一部分已经实现了每个同学成绩的报表输出,接下我们需要对每个同学进行分组统计,求每个同学的平均成绩。
1、在左侧的【字段资源管理器】中右键【组名字段】点击【插入组】
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304170929096-706280678.png)
2、选择要分组的字段,然后点击【确定】
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173353377-1669755645.png)
3、这是在报表的设计器中会自动添加一个【分组】的部分。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173424799-879932493.png)
4、在分组头中显示每组的名称,然后我们可以在组尾中进行成绩平均值的统计。点击【运行总计字段】【新建】。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173451534-1535802270.png)
5、点击【确定】会弹出编辑运行总计字段,然后在设置avg的值。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173511768-4144020.png)
6、点击【确定】后,在左侧的【字段资源管理器】中的【运行总计字段】会显示【avg】。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173532940-1178721298.png)
7、接下来,就可以把这个字段拖到报表设计器上的【组尾】部分中。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173554862-1765953594.png)
8、这下分组统计的报表模板就已经做好了。下面对报表模板进行整理一下,然后进行显示。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173617440-1919057221.png)
三 CrystalReport绑定自定义的数据源
我们在第一步,第二步中都是使用sqlserver(数据表,查询结果等)作为数据源,都是一个二维表,然后通过二维表的表头去布局报表模板,然后报表在显示的时候自动连接sqlserver,根据设置获取数据并显示,通过这样的方式我们的对数据的控制权就不够。而有时候我们需要在内存中对数据进行加工处理,形成一个自己的datable表,然后再绑定到报表上进行显示。下面我们就演示一下,如何使用内存的datatable表作为水晶报表的数据源。
1、定义一个DataTable数据表,并添加一些数据(作为自定义的数据源)。
代码如下:
private DataTable GetCustomDataTable() { DataTable dt = new System.Data.DataTable(); dt.Columns.Add("id", typeof(string)); dt.Columns.Add("userName", typeof(string)); dt.Rows.Add("430400","tjm"); dt.Rows.Add("430401", "lw"); dt.Rows.Add("430402", "tj"); return dt; }
2、定义好数据源之后,我们就需要根据我们自定的数据源建立一个报表模板。通过前面两步我们都知道,报表模板的设计都需要数据源的字段的,所以我们的添加一个dataset数据集来制作报表模板。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173639565-62982836.png)
3、然后在这个数据集上定义一个虚拟的表头就行了,这个虚拟的表头必须和内存中定义的数据源表头是一致的,方便我们进行报表的设计。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173702237-633236595.png)
4、然后在报表的设计器中,添加我们建立的自定义数据源,并进行设计。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173720815-234701697.png)
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173757518-1736870533.png)
5、然后在Form_load中为报表绑定数据自定义的数据源
private void Form1_Load(object sender, EventArgs e) { CrystalReport2 cr = new CrystalReport2(); cr.SetDataSource(GetCustomDataTable());//数据源的绑定(DataTable类型) this.crystalReportViewer1.ReportSource = cr; }
6、点击运行,结果就是我们自己定义的数据表中的数据。
![](https://images2015.cnblogs.com/blog/531939/201603/531939-20160304173816721-683936724.png)
总结
希望自己写的这个教程,对刚接触的水晶报表的同学有一些帮助。其中可能会有一些错误的地方,欢迎各位指正。