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 先看看效果: ...
随机推荐
- BZOJ2820: YY的GCD(反演)
题解 题意 题目链接 Sol 反演套路题.. 不多说了,就是先枚举一个质数,再枚举一个约数然后反演一下. 最后可以化成这样子 \[\sum_{i = 1}^n \frac{n}{k} \frac{n} ...
- 微信小程序request同步请求
今天在搞微信小程序的时候顺手用了async,await死活不起作用,后来查了一下子,竟然不支持,那没办法就换了一种实现wx.request同步请求的方案 祭出promise来搞一搞,下面直接贴代码,简 ...
- 常见聚类算法——K均值、凝聚层次聚类和DBSCAN比较
聚类分析就仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组(簇).其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的.组内相似性越大,组间差别越大,聚类就越好. 先介绍下聚类的不 ...
- RNN,LSTM中如何使用TimeDistributed包装层,代码示例
本文介绍了LSTM网络中的TimeDistributed包装层,代码演示了具有TimeDistributed层的LSTM网络配置方法. 演示了一对一,多对一,多对多,三种不同的预测方法如何配置. 在对 ...
- unresolved external symbol boost::throw_exception
使用boost库,VS生成的时候一直报错, error LNK2019: 无法解析的外部符号 "void __cdecl boost::throw_exception(class std:: ...
- 洗礼灵魂,修炼python(11)--python函数,模块
前面的章节你如果看懂了,基本算是入门了七八了,不过如果你以为python就这么点东西,你觉得很简单啊,那你就错了,真正的东西在后面,前面我说的几大核心其实也不是多么高深多么厉害的,那些东西是基础很常用 ...
- early_suspend【转】
android 休眠唤醒机制分析(二) - early_suspend early_suspend是Android休眠流程的第一阶段即浅度休眠,不会受到wake_lock的阻止,一般用于关闭lcd.t ...
- win7计划任务报该任务映像己损坏或己篡改
目录 win7计划任务报该任务映像己损坏或己篡改 前言 解决方案 排查损坏的计划任务映像 win7计划任务报该任务映像己损坏或己篡改 文:铁乐与猫 2018-9-20 前言 win7下想自定义一些计划 ...
- 6.3Pytyhon文件的操作(三)
目录 目录 前言 (一)文件的创建 (二)文件的删除 (三)文件的重命名 (四)文件的查看 (五)文件的复制 ==1.小文件的复制== ==2.大文件的复制== (六)文件的实战案例 ==1.文件的分 ...
- 报数的golang实现
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: . . . . . 1 被读作 "one 1" ("一个一") , 即 11 ...