作者:明诺新源研_889 | 来源:互联网 | 2023-08-22 12:00
一、概述水晶报表(CrystalReports)是一款应用非常广泛的商业智能软件,除了强大的报表功能外,最大的优势是实现了绝大多数流行开发工具的集成和接口。官网:https:www
一、概述
水晶报表(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),报表文件可以直接预览真实数据。
2、推模式
由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不与数据库进行交互。
报表文件中只有DataSet等数据结构(无具体的ConnectionString),需要应用程序去填充Dataset。
三、报表实例
//定义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();
八、打印