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+水晶报表的使用的更多相关文章

  1. 2.ASP.NET MVC 中使用Crystal Report水晶报表

    上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...

  2. C#水晶报表,窗体不显示,闪退

    一.问题说明 由于VS2008以后水晶报表不在集成,要用的话需要单独下载. 这里注意如果是用在C#窗体程序里的话一定要下载exe文件,安装msi文件的话VS工具栏里找不到水晶报表控件的.如果你的是64 ...

  3. 水晶报表初体验(Visual Studio 2010)

    安装水晶报表后如下使用: 配置rpt文件,如图 前台(Asp.net页面): <%@ Register Assembly="CrystalDecisions.Web, Version= ...

  4. c# 水晶报表的设计(非常的基础)

    最近在公司实习,由于公司需要用到的一种叫做水晶报表的神奇的东东,老大就叫我们学习学习.怕自己以后忘了,也为了以后阅读方便,将其记录下来. 使用工具:vs2008 基本方法一.使用水晶报表的推模式 步骤 ...

  5. 水晶报表13.x(Crystal Reports for VS2010)的安装部署经验

    这两天搞安装包真心坎坷,一个问题接一个问题,先是为了实现自定义动作现啃vbs,后面又是安装过程老是报错: 各种搜索.各种尝试,总算搞掂,积累了些经验,分享一下. 首先CR for VS2010的所有东 ...

  6. C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005

    解决办法一:<转自http://www.cnblogs.com/Sue_/articles/2123372.html> 具体解决方法如下: 1:在服务器上安装office的Excel软件. ...

  7. VS2010 水晶报表的使用

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

  8. 安装VS2010水晶报表插件

    Visual Studio 2010默认不带水晶报表,需要安装一个水晶报表插件,首先下载此插件: http://downloads.businessobjects.com/akdlm/cr4vs201 ...

  9. Crystal Reports 2008(水晶报表) 第一个报表

    学习Craystal Reports 2008的时候,光看说明文档,很多东西看了就忘了. 我在看文档的时候,是跟着文档上面来做的. 这样边看边做,效果还不错哈 下面就是我的第一个demo 先看看效果: ...

随机推荐

  1. Docker 启动遇到 Error starting daemon: Error initializing network controller 错误

    docker 版本 1.10.3 一台装有 docker 的机器重启后,没法启动,/var/log/messages 展示如下错误信息: May 17 11:11:14 gziba-hc03 syst ...

  2. 集合类--最详细的面试宝典--看这篇就够用了(java 1.8)

    看了一个星期源码,搜索上百篇博文,终于总结出了集合类的所有基础知识点,学集合,看这篇就够用了!!! 篇幅有点长, 如果你能全部理解,java最重要的集合就不怕了,秒过面试!!!(本篇素材来自网络,如有 ...

  3. idea vue.js插件安装

    Vue.js for IntelliJ IDEA-based IDEs This plugin provides support for Vue.js in IntelliJ IDEA Ultimat ...

  4. Android SDK Manager无法更新的解决方案

    Android SDK Manager -> Tools -> Options HTTP Proxy Server:mirrors.neusoft.edu.cn HTTP Proxy Po ...

  5. MySQL 性能优化--优化数据库结构之优化数据大小

    MySQL性能优化--优化数据库结构之优化数据大小   By:授客  QQ:1033553122 尽量减少表占用的磁盘空间.通常,执行查询期间处理表数据时,小表占用更少的内存. 表列 l   尽可能使 ...

  6. Sublime Text3 安装 markdownediting插件 报错 Error loading syntax file "Packages/Markdown/Markdown.tmLanguage":

    问题: Error loading syntax file "Packages/Markdown/Markdown.sublime-syntax": 解决方法: ./Data/Lo ...

  7. Java并发编程(六)volatile关键字解析

    由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识. 一.内存模型的相关概念 Java内存模型规定所有的变量都是存在 ...

  8. Android--清除默认桌面设置和设置默认桌面(转)

    http://blog.csdn.net/chaozhung_no_l/article/details/49929177 转自这位大神的博客,感谢这位大神,帮了大忙,谢谢!!

  9. (后端)如何将数据库的表导出生成Excel?

    1.如何通过元数据拿到数据库的信息? 2.如何用Java生成Excel表? 3.将数据库中的表导出生成Excel案例 如何通过元数据拿到数据库的信息 元数据:描述数据的数据 Java中使用元数据的两个 ...

  10. [20170927]关于hugepages.txt

    [20170927]关于hugepages.txt --//今天测试hugepages与内核参数nr_overcommit_hugepages,才发现HugePages_Surp表示什么? --// ...