C#(99):水晶报表编程

一、概述

水晶报表(Crystal Reports)是一款应用非常广泛的商业智能软件,除了强大的报表功能外,最大的优势是实现了绝大多数流行开发工具的集成和接口。

官网:https://www.crystalreports.com/crystal-reports-visual-studio/ 

下载:http://www.crystalreports.com/crvs/confirm/

链接:https://pan.baidu.com/s/1o_mxVGmiyDRxDRYwSkCf5Q
提取码:xx1a

最新版本: 13.0.25.3158,支持Visual Studio 2019

版本历史:https://chocolatey.org/packages/crystalreports-for-visualstudio

 二、推拉模式

1、拉模式

   由水晶模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据。

   报表文件中直接嵌入数据源(包含了具体的ConnectionString),报表文件可以直接预览真实数据。

image

2、推模式

由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不与数据库进行交互。

   报表文件中只有DataSet等数据结构(无具体的ConnectionString),需要应用程序去填充Dataset。

image

三、报表实例

//定义ReportDocument对象,装载Crystalreport1.rpt
ReportDocument myReport = new ReportDocument();
string reportPath = Server.MapPath("Reports/CrystalReport1.rpt");
myReport.Load(reportPath);
//或者直接强类型实例:
ReportDocument myReport = new WebApplication1.Reports.CrystalReport1();
//把模板对象赋给报表前端呈现控件CrystalReportViewerl
CrystalReportViewer1.ReportSource = myReport;

四、设置报表数据源

DataSet ds = new DataSet();
string connStr = @"server=Data Source=**;Initial Catalog=**;User ID=**";
using (SqlConnection conn = new SqlConnection(connStr))
{
    conn.Open();
    string SQL = "SELECT * FROM dbo.T_Company";
    SqlDataAdapter sda = new SqlDataAdapter(SQL, conn);
    sda.Fill(ds, "UserInfo");
}
ReportDocument rd = new ReportDocument();
//获取报表路径
string reportPath = Server.MapPath("Reports/CrystalReport2.rpt");
rd.Load(reportPath);
//绑定数据集,注意一个表用一个数据集。
rd.SetDataSource(ds);
rd.Refresh();
CrystalReportViewer1.ReportSource = rd;
CrystalReportViewer1.RefreshReport();

五、报表布局

((BlobFieldObject)rd.ReportDefinition.ReportObjects["Barcode1"]).Left = 20;
((TextObject)rd.ReportDefinition.ReportObjects["txtStatus"]).Left = 30;

六、报表参数

var crParameterFieldDefinitions = myReport.DataDefinition.ParameterFields;//获取在报表上定义的所有的参数字段集合
ParameterFieldDefinition companyPara = crParameterFieldDefinitions["company"];//获得其中company这个参数字段 ParameterValues companyParaValues = companyPara.CurrentValues;//获得company参数字段中,所有值集合 var crParameterDiscreteValue = new ParameterDiscreteValue();//定义一个新的参数离散值 crParameterDiscreteValue.Value = "aa";//为此离散值赋值 companyParaValues.Add(crParameterDiscreteValue); //将一个离散值加到此值集合中
companyPara.ApplyCurrentValues(companyParaValues);//在company这个参数字段中,运用此参数值集合

七、导出到PDF

CrystalDecisions.Shared.DiskFileDestinationOptions diskOptions = new CrystalDecisions.Shared.DiskFileDestinationOptions();
diskOptions.DiskFileName = "1.pdf";
CrystalDecisions.Shared.ExportOptions exportOptions = rd.ExportOptions;
exportOptions.DestinationOptions = diskOptions;
exportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
exportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
rd.Export();
rd.Dispose();

八、打印

posted on 2018-08-06 22:57  springsnow  阅读(1209)  评论(0编辑  收藏  举报

导航