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


一、概述

水晶报表(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();

八、打印

相关