VisualStudio2008+水晶报表的使用
1:打开VisualStudio2008,新建一个Windows窗体应用程序项目,名称可以自定义,选择项目的保存路径,然后确定

刚新建好的窗体应用程序:

2. 把准备好的水晶报表插件复制到项目中的bin文件夹(不复制也可以,个人习惯),然后在程序中引用这些控件




(注意,添加的控件不是每个都用得上,但我这里全部引用了)
3.在程序中的工具栏中的报表栏添加选择项



以上就是添加水晶报表的插件到VS2008中,下面就开始使用水晶报表
4.在Form1窗口放一个按钮,命名为”生成报表”,主要是用来点击后,就弹出一个报表的窗口。那么再需新建一个报表的窗口Form2.




5. 打开Form2窗口,
把这个拖进窗口里。

拖进后,窗口是这样的:

6. 创建水晶报表,在窗口中鼠标右键弹出选项框,选择创建新Crystal报表

我这里只是演示,就不重新命名报表名称了,大家可以根据项目来命名



下面我参考一张报告来设计这个报表,但这个报表有点复杂,我就做简化一点,取其中部分内容显示到报表中,主要是以实现功能为目的。

7.在报表头输入文字


8. 插入线条,把Line 工具拖进入,按需要调整


现在预览看看






以上就是简单的显示报表的功能,那么一般情况下,都是需要连接数据库,从数据库查询的数据展示到报表中的。那么下面这样的功能
9. 在数据库中新建一个数据库Test,新建一个Test表,根据需要建立字段,我这里简单建几个字段。
数据库的Test表的字段如下:


在VS2008中需要添加一个叫APP.Config的“应用程序配置文件”,如果是高版本的,默认是添加好的

App.config的代码如下

添加一个类SqlHelper的类,用于做连接数据库做增删改查的工具

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 水晶报表
{
class SqlHelper
{
//获取连接字符串
private static readonly string connstr = ConfigurationManager.ConnectionStrings["connectstr"].ConnectionString;
/// <summary>
/// 创建数据库连接
/// </summary>
/// <returns>返回一个连接对象conn</returns>
public static SqlConnection CreateConnection()
{
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
return conn;
}
/// <summary>
/// 该方法主要用于增删改操作
/// </summary>
/// <param name="conn">连接对象</param>
/// <param name="sql">sql语句</param>
/// <param name="parameters">sql语句中的参数</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(SqlConnection conn, string sql, params SqlParameter[] parameters)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();
}
}
/// <summary>
/// 该方法主要用于增删改操作
/// </summary>
/// <param name="sql">sql</param>
/// <param name="parameters">语句中的参数</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = CreateConnection())
{
return ExecuteNonQuery(conn, sql, parameters);
}
}
/// <summary>
/// 首行首列查询
/// </summary>
/// <param name="conn">连接对象</param>
/// <param name="sql">sql语句</param>
/// <param name="parameters">sql语句中的参数</param>
/// <returns>返回的是首行首列--object类型</returns>
public static object ExecuteScalar(SqlConnection conn, string sql, params SqlParameter[] parameters)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}
}
/// <summary>
/// 首行首列查询
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">sql语句中的参数</param>
/// <returns>返回的是首行首列--object类型</returns>
public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = CreateConnection())
{
return ExecuteScalar(conn, sql, parameters);
}
} /// <summary>
/// 该方法用来查询
/// </summary>
/// <param name="conn">连接对象</param>
/// <param name="sql">sql语句</param>
/// <param name="parameters">sql语句中的参数</param>
/// <returns>返回的是DataTable</returns>
public static DataTable ExecuteQuery(SqlConnection conn, string sql, params SqlParameter[] parameters)
{
DataTable table = new DataTable();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
using (SqlDataReader reader = cmd.ExecuteReader())
{
table.Load(reader);
}
}
return table;
} /// <summary>
/// 该方法用来查询
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">sql语句中的参数</param>
/// <returns>返回的是DataTable</returns>
public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = CreateConnection())
{
return ExecuteQuery(conn, sql, parameters);
}
}
}
}
SqlHelper代码
程序还需要添加一个Configuration插件的的引用

10. 下面我做的功能是:在Form1中,点击按钮,就执行查询数据库Test表的所有数据,然后把数据传递给Form2,由Form2的报表显示出来
现在先创建一个实体text类,代码如下,然后将实体类绑定到报表里,如下图所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 水晶报表
{
class Test
{
//TestId, T_Circult_Des, T_Device_Type, T_Device_Rating, T_Conductor_Live, T_Conductor_cpc, T_Pro_conductor, T_Polarity
private int id; public int Id
{
get { return id; }
set { id = value; }
} private string circult_Des; public string Circult_Des
{
get { return circult_Des; }
set { circult_Des = value; }
}
private string device_Type; public string Device_Type
{
get { return device_Type; }
set { device_Type = value; }
}
private string device_Rating; public string Device_Rating
{
get { return device_Rating; }
set { device_Rating = value; }
}
private string conductor_Live; public string Conductor_Live
{
get { return conductor_Live; }
set { conductor_Live = value; }
}
private string conductor_cpc; public string Conductor_cpc
{
get { return conductor_cpc; }
set { conductor_cpc = value; }
}
private bool pro_conductor; public bool Pro_conductor
{
get { return pro_conductor; }
set { pro_conductor = value; }
}
private bool polarity; public bool Polarity
{
get { return polarity; }
set { polarity = value; }
}
}
}
Test类代码





11.在Form1的按钮事件中,增加如下代码

在Form2的窗口代码中,敲入以下代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine; namespace 水晶报表
{
public partial class Form2 : Form
{
public Form2()
{ } DataTable dt1 = new DataTable();//创建一个dt1对象,存储FORM1传来的数据
public Form2(DataTable dt)//新建一个有参数的构造函数
{
dt1 = dt;
InitializeComponent();
} private void Form2_Load(object sender, EventArgs e)//初始化加载
{
List<Test> list = DataTableToList(dt1);//创建一个Test对象的集合,把dt1的数据转换成对象存储到集合中
ReportDocument myReport = new ReportDocument();//创建一个报表对象
string reportPath = @"D:\c#\水晶报表\水晶报表\CrystalReport1.rpt";//定义报表的路径
// string reportPath = Application.StartupPath + "\\CrystalReport1.rpt";
myReport.Load(reportPath);//加载报表
myReport.SetDataSource(list);//把数据附加到报表对象中
crystalReportViewer1.ReportSource = myReport;//把对象的数据显示到报表中
} //关系表转对象集合
private List<Test> DataTableToList(DataTable dt)
{
List<Test> testList = new List<Test>();
for (int i = ; i < dt.Rows.Count; i++)
{
Test test = new Test();
test.Id = Convert.ToInt32(dt.Rows[i]["Id"]);
test.Circult_Des = dt.Rows[i]["T_Circult_Des"].ToString();
test.Device_Type = dt.Rows[i]["T_Device_Type"].ToString();
test.Device_Rating = dt.Rows[i]["T_Device_Rating"].ToString();
test.Conductor_Live = dt.Rows[i]["T_Conductor_Live"].ToString();
test.Conductor_cpc = dt.Rows[i]["T_Conductor_cpc"].ToString();
test.Pro_conductor = Convert.ToBoolean(dt.Rows[i]["T_Pro_conductor"]);
test.Polarity = Convert.ToBoolean(dt.Rows[i]["T_Polarity"]);
testList.Add(test);
}
return testList;
}
}
}
Form2代码
12.运行看看数据是否已成功绑定到水晶报表中了

已成功的完成数据的绑定
最后就需要根据需要,为报表添加线条作为边框美化一下,C#+水晶报表的使用原理就是这样的了。我下面就用文本框添加边框的方式添加的

运行看看:

是不是觉得上面的内容,本来想显示√的,真显示了个“真”,我们可以再水晶报表中写个公式,如果为真,显示√ 如果为假,则不显示



同理 如果是true ,真显示OK,false显示“ ”一个空格

在数据库中添加多条数据来展示



保存PDF,PDF打开是这样的

总结步骤:
1. 在程序中新建一个水晶报表的模板
2. 在程序中新建一个实体类,也就是用来绑定到报表上的数据源
3. 查询出的数据,放到实体类的集合中,作为报表的源数据,这样就可以显示出来了。
报表显示的主要代码如下

VisualStudio2008+水晶报表的使用的更多相关文章
- 2.ASP.NET MVC 中使用Crystal Report水晶报表
上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...
- C#水晶报表,窗体不显示,闪退
一.问题说明 由于VS2008以后水晶报表不在集成,要用的话需要单独下载. 这里注意如果是用在C#窗体程序里的话一定要下载exe文件,安装msi文件的话VS工具栏里找不到水晶报表控件的.如果你的是64 ...
- 水晶报表初体验(Visual Studio 2010)
安装水晶报表后如下使用: 配置rpt文件,如图 前台(Asp.net页面): <%@ Register Assembly="CrystalDecisions.Web, Version= ...
- c# 水晶报表的设计(非常的基础)
最近在公司实习,由于公司需要用到的一种叫做水晶报表的神奇的东东,老大就叫我们学习学习.怕自己以后忘了,也为了以后阅读方便,将其记录下来. 使用工具:vs2008 基本方法一.使用水晶报表的推模式 步骤 ...
- 水晶报表13.x(Crystal Reports for VS2010)的安装部署经验
这两天搞安装包真心坎坷,一个问题接一个问题,先是为了实现自定义动作现啃vbs,后面又是安装过程老是报错: 各种搜索.各种尝试,总算搞掂,积累了些经验,分享一下. 首先CR for VS2010的所有东 ...
- C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
解决办法一:<转自http://www.cnblogs.com/Sue_/articles/2123372.html> 具体解决方法如下: 1:在服务器上安装office的Excel软件. ...
- VS2010 水晶报表的使用
在VS2010中新建一个“Windows 窗体应用程序”项目,在该项目中添加一个水晶报表“CrystalReport1.rpt”,然后在项目上点击鼠标右键属性,将“目标框架”改为“.Net Frame ...
- 安装VS2010水晶报表插件
Visual Studio 2010默认不带水晶报表,需要安装一个水晶报表插件,首先下载此插件: http://downloads.businessobjects.com/akdlm/cr4vs201 ...
- Crystal Reports 2008(水晶报表) 第一个报表
学习Craystal Reports 2008的时候,光看说明文档,很多东西看了就忘了. 我在看文档的时候,是跟着文档上面来做的. 这样边看边做,效果还不错哈 下面就是我的第一个demo 先看看效果: ...
随机推荐
- blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...
- 纯小白入手 vue3.0 CLI - 3.3 - 路由的导航守卫
vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...
- 安卓开发_WebView设置打开网页缩放问题
之前实现打开网页的方式,测试后,发现不能够对网页进行缩放操作,这对部分网页来说是十分不便的, 百度了一下解决方案 其实只需要加几行代码就可以实现网页缩放操作 settings.setUseWideVi ...
- Web API 方法的返回类型、格式器、过滤器
一.Action方法的返回类型 a) 操作方法的返回类型有四种:void.简单或复杂类型.HttpResponseMessage类型.IHttpActionResult类型. b) 如果返回类型为vo ...
- spring 引用Bean的属性值
引用Bean的属性值 从Spring3.0开始,可以通过#{beanName.beanProp}的方式方便地引用另一个bean的属性值1.不需要使用PropertyPlaceholderConfigu ...
- [iOS] KVC 和 KVO
开发iOS经常会看见KVO和KVC这两个概念,特地了解了一下. 我的新博客wossoneri.com link KVC Key Value Coding KVC是一种用间接方式访问类的属性的机制.比如 ...
- AOP缓存实现
输入参数索引作为缓存键的实现 using MJD.Framework.CrossCutting; using MJD.Framework.ICache; using System; using Sys ...
- [20180403]访问dba_autotask_task无输出问题.txt
[20180403]访问dba_autotask_task无输出问题.txt --//链接http://www.itpub.net/thread-1911421-1-1.html的讨论,还没注意原先的 ...
- jenkins安装及配置-centos6.9
Jenkins安装及配置 目录 1.安装java. 2 1.1安装说明... 2 1.2创建java目录... 2 1.3下载并解压... 2 1.4设置环境变量... 2 1.5验证JDK有效性.. ...
- 【PAT】B1027 打印沙漏(20 分)
#include<cstdio> #include<stdlib.h> char C='*'; int qiushu(int hang){//输入行数,求出字符数 int su ...