开篇


本篇文章主要是帮助刚开始接触CrystalReport报表的新手提供一个循序渐进的教程。该教程主要分为三个部分1)CrystalReport的基本使用方法;2)使用CrystalReport对数据进行分组求和;3)CrystalReport如何使用自定义的数据源(如内存中的DataTable表)三个方面来写。相信看懂了这个教程之后,对于自己项目中的实现报表这一功能,应该就能轻松的应对了。
 
一    CrystalReport模板的制作及显示

A模板的制作
1、右键【项目属性】添加一个水晶报表(在vs中需要安装CrystalReport模块,不同vs版本下载不同的CrystalReport版本:CrystalReport下载链接:http://scn.sap.com/docs/DOC-7824
 
2、添加报表的设计界面如下:一个报表包括(报表头,页眉,详细资料,报表尾,页眉)5个基本部分。
 
3、现在我们需要给新建的报表添加一个数据源,右键左边的【数据库字段】选择相应的数据源,进行绑定。我这里选择的是sqlserver数据库。
 
 
4、输入数据库的登录信息,然后选择需要绑定的数据库表,除了绑定数据表之外,还可以绑定sql语句查询的结果,以及存储过程和视图,下面给出绑定数据库表格,和绑定sql查询。
1)绑定数据库表格
 
 
2)点击连接下面的【添加命令】绑定sql语句。
 
5、绑定数据库之后在报表左侧的【字段管理器】中就会出现该表以及sql查询结果的的相应表头字段。
 
6、把相应的字段在报表视图中进行布局。
 
 
到此水晶报表的模板已经做好了。注意:页眉中的userName,courseName,score是可以更改。
 
B模板的显示
1、首先在窗体上拖一个CrystalReportView控件作为显示报表模板。
 
2、在form_load事件里面写如下代码:
  CrystalReport1 cr = new CrystalReport1();//实例化一个报表模板

  this.crystalReportViewer1.ReportSource = cr;//为报表显示控件设置数据源 
3、运行
 
报表设计点丑,但是你可以根基自己的风格进行排版设计,如字体,大小,颜色等啦。
 
二    CrystalReport分组统计

我们在第一部分已经实现了每个同学成绩的报表输出,接下我们需要对每个同学进行分组统计,求每个同学的平均成绩。
1、在左侧的【字段资源管理器】中右键【组名字段】点击【插入组】
2、选择要分组的字段,然后点击【确定】
 
3、这是在报表的设计器中会自动添加一个【分组】的部分。
4、在分组头中显示每组的名称,然后我们可以在组尾中进行成绩平均值的统计。点击【运行总计字段】【新建】。
5、点击【确定】会弹出编辑运行总计字段,然后在设置avg的值。
 
6、点击【确定】后,在左侧的【字段资源管理器】中的【运行总计字段】会显示【avg】。
7、接下来,就可以把这个字段拖到报表设计器上的【组尾】部分中。
8、这下分组统计的报表模板就已经做好了。下面对报表模板进行整理一下,然后进行显示。
 
 
三    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("","tjm");
dt.Rows.Add("", "lw");
dt.Rows.Add("", "tj");
return dt;
}
2、定义好数据源之后,我们就需要根据我们自定的数据源建立一个报表模板。通过前面两步我们都知道,报表模板的设计都需要数据源的字段的,所以我们的添加一个dataset数据集来制作报表模板。
3、然后在这个数据集上定义一个虚拟的表头就行了,这个虚拟的表头必须和内存中定义的数据源表头是一致的,方便我们进行报表的设计。
4、然后在报表的设计器中,添加我们建立的自定义数据源,并进行设计。
 
5、然后在Form_load中为报表绑定数据自定义的数据源
     private void Form1_Load(object sender, EventArgs e)
{
CrystalReport2 cr = new CrystalReport2();
cr.SetDataSource(GetCustomDataTable());//数据源的绑定(DataTable类型)
this.crystalReportViewer1.ReportSource = cr;
}
6、点击运行,结果就是我们自己定义的数据表中的数据。
 
总结

希望自己写的这个教程,对刚接触的水晶报表的同学有一些帮助。其中可能会有一些错误的地方,欢迎各位指正。

WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源的更多相关文章

  1. ASP.NET MVC 5使用CrystalReport(水晶报表)

    原文:ASP.NET MVC 5使用CrystalReport(水晶报表)   http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS ...

  2. C# WinForm开发系列 - Crystal Report水晶报表

    转自:ttp://www.cnblogs.com/peterzb/archive/2009/07/11/1521325.html 水晶报表(Crystal Report)是业内最专业.功能最强的报表系 ...

  3. Vs2010中水晶报表引用及打包

    原文:Vs2010中水晶报表引用及打包 转自:http://yunhaifeiwu.iteye.com/blog/1172283 Vs2010中水晶报表引用 在sap官网中下载支持vs 2010中的水 ...

  4. asp.net实现通用水晶报表

    此片博文是在你有一定水晶报表基础的前提下参阅的:如果对于水晶报表的基础知识比较薄弱建议先去了解下水晶报表: 因为项目需要,研究了下水晶报表.说实在,这个组件很强大,但是用起来也很麻烦.刚开始使用遇到了 ...

  5. VS2010 水晶报表的使用

    在VS2010中新建一个“Windows 窗体应用程序”项目,在该项目中添加一个水晶报表“CrystalReport1.rpt”,然后在项目上点击鼠标右键属性,将“目标框架”改为“.Net Frame ...

  6. VisualStudio2008+水晶报表的使用

    1:打开VisualStudio2008,新建一个Windows窗体应用程序项目,名称可以自定义,选择项目的保存路径,然后确定 刚新建好的窗体应用程序: 2. 把准备好的水晶报表插件复制到项目中的bi ...

  7. 只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft

    前言 随着 .NET 平台的出现,报表相关的开发控件随之出现,目前已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件,给所有报表开发人员在做产品选型时一 ...

  8. asp.net core使用水晶报表问题

    背景     最近项目上遇到一个需求,要后台通过定时任务把水晶报表生成pdf文件,然后邮件发送给相关人. 技术实现思路     选用ASP.NET Core框架(基于2.2版本),通过IHostedS ...

  9. (转)VS2010结合水晶报表做条码标签打印功能

    本文转载自:http://blog.sina.com.cn/s/blog_552ca1400100y6dd.html 先来个功能效果图: 大家都知道VS2005和VS2008软件本身是包含水晶报表插件 ...

随机推荐

  1. Windows 内核漏洞学习—空指针解引用

    原标题:Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/w ...

  2. 关于MySQL连接抛出Authentication Failed错误分析

    [问题描述] 在应用端,偶尔看到有如下报错: Authentication to host 'xxxx' for user 'yyyy' using method 'mysql_native_pass ...

  3. MyEclipse配置Hibernate具体步骤

    工具: MyEclipse,MySQL 步骤: 1.打开MyEclipse,新建一个Java Project(取名:h1) 2.创建MySQL数据库 3.找到MyEclipse下的MyEclipse ...

  4. 基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示

    headers: {"X-CSRFToken": $("[name='csrfmiddlewaretoken']").val()},data:$(". ...

  5. 【LeetCode】390. 消除游戏

    题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直 ...

  6. 死锁、Lock锁、等待唤醒机制、线程组、线程池、定时器、单例设计模式_DAY24

    1:线程(理解) (1)死锁 概念: 同步中,多个线程使用多把锁之间存在等待的现象. 原因分析: a.线程1将锁1锁住,线程2将锁2锁住,而线程1要继续执行锁2中的代码,线程2要继续执行锁1中的代码, ...

  7. Java之集合(十四)Hashtable

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7426522.html 1.前言 HashTable这个类很奇特,其继承了Dictionary这个没有任何具体实现 ...

  8. puppet的使用:安装puppet

    最近项目要使用puppet,趁机赶紧学习下. 在家里的机器中搭建puppet环境,使用两台ubuntu 14.04: 准备工作 时间同步 两台设备先进行时间同步,我把要安装master的机器作为NTP ...

  9. 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信

    在java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信.在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调 ...

  10. 用sinopia搭建内部npm服务

    sinopia搭建 这里默认你已经有node环境了,执行下面命令,全局安装 sinopia npm install -g sinopia 安装好后,执行下面命令启动 sinopia sinopia 你 ...