zoukankan      html  css  js  c++  java
  • 关于vs2010下水晶报表的使用入门

    关于vs2010下使用水晶报表了解情况记录如下:

    1.首先vs2010不再自带水晶报表控件了,需要下载安装vs2010配套的水晶报表控件:CRforVS_13_0。这个控件安装很简单,基本上都选择默认设置就可以了。

    2.安装之后,再在vs2010中添加新项,选中reporting,下面就有CrystalReports的选项了,这个就是水晶报表文件。

    3.新建一个CrystalReports文件,vs2010会弹出一个水晶报表模版生成向导,可以根据向导指示,一步一步的生成自己需要的报表文件。这里我选择了标准模式。

    4.根据向导的数据库连接提示,我选择了oracle服务器连接,使水晶报表与数据库连接起来,只需要按要求输入服务名,用户和密码,水晶报表模版就会自己连接上oracle。

    5.然后选择需要的表或者视图,并选择相应的字段,(我跳过了后面的分组和过滤字段的设置),然后选择报表样式,水晶报表就会为你自动生成一个默认的模版。

    你可以在此模版上进一步进行样式的优化调整,包括增加合并,求和等等高级操作。

    6.至此,模版制作完成,现在开始写代码。

    新建一个webform窗体,并在工具箱中选择报表设计,拖放一个CrystalReportViewer控件到页面上,这个就是水晶报表的web控件,有了它就可以轻松实现很多复杂的功能了。

    7.可以根据自己的需求通过控制该控件的属性来控制控件的显示效果。

    如:

    HasPrintButton="False" //不显示打印功能按钮

    HasCrystalLogo="False" //不显示水晶报表logo

    HasDrilldownTabs="False" //不显示下载按钮

    HasDrillUpButton="False" //不显示上传按钮

    HasGotoPageButton="False" //不显示转跳按钮

    ToolPanelView="None" //不显示工具栏

    HasToggleGroupTreeButton="false" // 不显示水晶报表树按钮。

    8.那么如何让这个水晶报表在页面上跑起来呢?下面是相关的代码

    首先需要说明的是,水晶报表和众多报表控件一样有pull模式和push模式的区别。所谓的pull模式就是在模版中指定数据源,并通过模版直接取得数据并显示到控件上的模式,也是我正在使用的模式。push模式,是自己在程序中组织数据源,并推送给水晶报表模版,显示在控件上的模式,属于高级应用,更强大更灵活,当然自己也需要写更多的代码。

    今天这里主要将简单好用的pull模式。

    首先,初始化水晶报表类并装载好需要的模版。

    1 //找到水晶报表模版,我的水晶报表是放在web系统根目录下的WebReport文件夹中的,
    2 string MasterplateName = "test.rpt";
    3 string reportPath = Server.MapPath(Request.ApplicationPath + "/WebReport/" + MasterplateName);
    4 ReportDocument myReport = new ReportDocument();
    5 myReport.Load(reportPath);

    接下来,需要重新为模版的数据库连接指定连接串防止,水晶报表连接不到数据库

    //定义水晶报表的数据库连接信息 
    ConnectionInfo connectionInfo = new ConnectionInfo();
    //取到webconfig中的连接串
    string sOracleCon = System.Configuration.ConfigurationManager.AppSettings["connectionString"].TrimEnd(';');
    //处理得到数据源,用户和密码
    string[] listOracleCon = new string[3];
    string[] listOracleConTemp1 = sOracleCon.Split(';');
    for (int i = 0; i < listOracleConTemp1.Length; i++)
    {
          string[] listOracleConTemp2 = listOracleConTemp1[i].Split('=');
          listOracleCon.SetValue(listOracleConTemp2[1], i);
    }
     //数据库名或数据库服务
    connectionInfo.DatabaseName = listOracleCon[0];
     //用户名
    connectionInfo.UserID = listOracleCon[1];
    //用户密码
     connectionInfo.Password = listOracleCon[2];
    //数据库地址,oracle数据库不需要设置
    //connectionInfo.ServerName = "localhost";
    //将数据库信息传递给报表 
     SetDBLogonForReport(connectionInfo, myReport);
    private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
    {
         Tables tables = reportDocument.Database.Tables;
          foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
         {
             TableLogOnInfo tableLogonInfo = table.LogOnInfo;
             tableLogonInfo.ConnectionInfo = connectionInfo;
             table.ApplyLogOnInfo(tableLogonInfo);
          }
    } 

    最后,将水晶报表对象赋给页面模版

    //把模板对象赋给报表前端呈现控件CrystalReportViewer1          
    CrystalReportViewer.ReportSource = myReport;

    完成之后,编译,就可以在页面上看到效果了,非常的方便和快捷。

    最后自己再记录一下,push模式,需要自己先通过代码连接数据库,并生成dataset,再传给水晶报表类,并赋给模版。以便后面的自学。

    DataSet ds = new DataSet();
    ReportDocument myReport = new ReportDocument();
    myReport.SetDataSource(ds); 
    CrystalReportViewer.ReportSource = myReport;
  • 相关阅读:
    Flink sql 写 Hbase 忽略空列
    python协程系列(一)——生成器generator以及yield表达式详解
    Python中可迭代对象,迭代器和生成器的异同点
    Python生成器: send函数、close函数与yield关键字协作
    sqlalchemy的基本用法
    Windows10激活后又提示未激活解决办法
    parseaddr函数和formataddr函数的用法
    VisualStudio Code Remote 调试方法(错误Containers Docker version 17.12.0 or later required.)
    SpringBoot Jar Windows CMD 运行卡顿
    使用Aspose.cells(java)将excel转为图片等
  • 原文地址:https://www.cnblogs.com/wenpeng/p/3816074.html
Copyright © 2011-2022 走看看