一、概述
水晶报表(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();