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 先看看效果: ...
随机推荐
- JS之iscroll.js的使用详解
入门 Scroll是一个类,每个需要使用滚动功能的区域均要进行初始化.每个页面上的iScroll实例数目在设备的CPU和内存能承受的范围内是没有限制的. 尽可能保持DOM结构的简洁.iScroll使用 ...
- Linux下查看tomcat控制台输出信息
1.进入tomcat/logs文件夹下 2.# tail -f catalina.out -f:实时刷新
- 【工具相关】Web-Sublime Text2-安装插件HTMLPrettify
一,打开Sublime Text2---->Preferences--->Browse Packages.--->查看Sublime Text2已经有的插件.如图所示. 二,在网上下 ...
- list中放map的几种方式
package Test; import java.util.*; public class Test { public static void main(String[] args) { //第一种 ...
- Python之逻辑回归
代码: import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegress ...
- layer层、modal模拟窗 单独测试页面
layer_test.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- Paxos 算法 :消息传递一致性
网络上有很多关于优秀的关于Paxos 算法的文章,我下面进行整理搜集一下: 分布式理论之一:Paxos算法的通俗理解 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 L ...
- Visual Studio 2015的安装与测试单元的配置与使用
首先感谢吴小勇同学的教程,及其详尽周全.详见http://www.cnblogs.com/xiaoyongwu/p/5289964.html 那么正式开始,事实上在撰写这篇博文的时候,这个图标 ...
- ABP模块运行解析
从官方创建一份ASP.NET CORE 2.0的项目,并加入源码调试,可以看出如下图的加载顺序 1.ABP是通过什么样的机制加载的 既然ABP中模块需要添加DLL到引用中,又要加入DependsOn在 ...
- mvc、mvp和mvvm理解
MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...