水晶报表安装配置

官网https://www.sap.com

一、下载
  1、水晶报表有两个必备文件和一个编辑软件
    1)CRforVS_13_0_1.exe 这是开发电脑上,为VS2010配套的,安装之后,VS中会自动增加reportViewer工具和rpt文件建立模板,可以在VS中创建和修改RPT报表
    2)CRforVS_redist_install_64bit_13_0_1.zip  这是运行环境,开发电脑上不需要安装,安装在服务器上。
    3)水晶报表2008(CR2008)这是用来编辑rpt文件的,因为报表制作常常很麻烦,VS2010中编辑器功能有限,就用这个CR2008。这个用得好象较多,我准备使用它
    以前用的是水晶报表9,英文版的水晶报表10
    要注意:版本可以比VS2010的低,低了大部分能识别,但不能装高版本,
    以前系统使用是CR10.0,我制作报表作的是中文版CR9,感觉很好。
  2、下载地址:
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0.exe     --for VS2010 
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_17.exe  --for VS2015
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_21.exe  --for VS2017
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_32bit_13_0.zip   --67.5M下载慢
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_32bit_13_0_1.zip   --67.9M下载慢

  3、VS与CR的版本对应
  VS 2010 - 13.0原始版本和更高版本

  VS 2012 - 13.0_7和更高

  VS 2013 - 13.0_9和更高

  VS 2015rc–13.0_14

  VS 2015 - 13.0_15和更高

  VS 2017 - 13.0_21和更高

二、安装

VS2010中,可以安装CRforVS_13_0_1,也可以安装CRforVS_13_0
注意:要用管理员来运行安装程序,否则可能报错:错误2753。文件“agent.exe.6ed28686”没有为安装作标记
   
安装CRforVS_13_0_1.exe之后,VS2010工具箱中自动出现“报表设计”水晶报表工具

CR不支持Visual Studio的Express版本

默认情况下Windows 10没有安装3.5框架,VS的CR仍然需要它。通过“打开或关闭Windows功能”来选择它,并选择这两个选项。(By default Windows 10 does not install the 3.5 framework, CR for VS still needs it. Select it by “Turn Windows feature on or off” and choose both options.)

注意:版本号后边的13_0_1为小版本号,下载时2个文件的小版本号要相同。开发电脑和服务器上安装的版本号要一致。

安装之后显示CRforVS_13_0_1.exe的版号是13.0.1.22 ,web.config文件中使用这个版本号,CR浏览的ASPX文件中会自动生成这个版本号;
  CRforVS_13_0.exe的版本号是13.0.0.99
  CRforVS_13_0_21.exe的版本号是13.0.21.2533

  CRforVS_redist_install_32it_13_0_1.zip、CRforVS_redist_install_64bit_13_0_1.zip这两个版本
  网上说VS2010只能安装32位,但我在服务器上直接安装的是64位的,没问题。

三、部署和排错
1、VS2010系统项目中添加引用5个库文件
CrystalDecisions.CrystalReports.Engine 版本13.0.1.22
CrystalDecisions.ReportSource 版本13.0.1.22
CrystalDecisions.Shared       版本13.0.1.22
CrystalDecisions.Web          版本13.0.1.22
ICSharpCode.SharpZipLib.dll   版本0.86替换原来的0.84
前4个都在C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet
如果项目是C/S的程序,引用CrystalDecisions.Windows.Forms来替换CrystalDec主sions.Web

注:VS2017 版本号13.0.21.2533 引用文件也在上面的文件夹中

2、样式文件aspnet_client
  安装CRforVS_13_0_1.exe后,C:\inetpub\wwwroot自动生成了aspnet_client文件夹,这里面是水晶报表的样式文件
  把aspnet_client复制到项目文件的根目录,没这个样式,水晶报表显示的是一片空白,工具栏按钮都没有。
  我的电脑就怪了,复制了这个样式,也没显示,查看网页源文件,才知道有两点不同:
 1)项目指定的样式文件夹是aspnet_client不存在的,叫4_6_81,本应是4_0_30319。处理方法:复制4_0_30319,粘贴为4_6_81 。不同的项目,指定的编号不同,有一次服务器补丁后,编号也变了。
  2)项目指定的样式文件路径不在项目根目录,而是真指C:\inetpub\wwwroot\aspnet_client\4_6_81
  服务器上是指向项目根目录的aspnet_client\4_6_81

3、数据集模式
  数据库中直接读表的方式,很容易就实现了水晶报表的功能。
  但项目报表不可能这样一成不变,必须选用数据集的模式。这个模式下,把我整得好苦。
  最关键的是数据集绑定时的写法必须是:rptDocument.SetDataSource(rptDataSet.Tables[0].DefaultView);
  我以前在CR10中运行十多年,用的都是:rptDocument.SetDataSource(rptDataSet);
  结果:以前的绑定不能把数据传进RPT,也不显示错误,却显示:您请求的报表需要更多信息,要求登录服务器名、数据库登录信息,而且无法输入登录信息
  这个问题困扰我3天3夜,最后是参考了网上一篇文章才实现的:http://blog.csdn.net/jsjpanxiaoyu/article/details/42360659
 
4、log4net版本错误提示
  运行打开水晶报表,报错:log4net要更高版本,可整个系统与log4net没半毛钱关系,log4net是一个日志功能。
  实际问题是:VS2008项目转VS2010后,水晶报表浏览页要重做,没有原因,重做了就好

5、乱码问题
  水晶报表浏览页出现乱码。这跟上面的问题解决方法是一样的。

6、crystalreportviewer属性设置
  1)VS2008下设置的属性不能再用了,会报错;
  2)去掉左边的树图:在“设计”视图下单击你的CrystalReportView,点击右上角的小箭头,设置“选择工具面板视图”为“none”
   相当于属性中添加  ToolPanelView="None"
  3)工具栏添加报表页选择框:
  4)无法设置水晶报表浏览器居中:这个问题还没解决
  5)VS2008下制作的证书格式(更改RPT显示到HTML中的格式,有些复杂),现在不认了。还没找到解决办法
  6)CS中设置属性:
     //不显示组树
     CrystalReportViewer1.DisplayGroupTree = false;
     //不显示徽标
     CrystalReportViewer1.HasCrystalLogo = false;

7、RPT文件生成CS文件的错误
  在VS2008中,操作RPT文件,会自动生成CS文件,然后整个项目就无法编译了,整个项目都无法识别引用和命名空间。
  删除RPT下的CS文件,就没事了。
  但删除了,再操作,又生成了,再删除就没事了。
  VS2008下做的几个项目,都存在这个问题
  项目转到VS2010下,还是一样存在这个问题。没解决掉。
  但是,我在VS2010中,新建一个测试项目,却没有这个问题。

8、XSD数据集文件的错误
  跟上面的情况一样一样的。

9、数据集绑定数据实现水晶报表的步骤:
  1)建数据集:项目中,添加--新建项--数据--数据集,输入一个与RPT文件名称一样的文件名,便于区分;
     在新建弹出的界面,右键--添加--数据表,名称可以改成数据集的名称一样的,也可以不改,就用DataTable1
     添加列,报表需要的列都添加进去
  2)写SQL查询语句,照着数据集的列名,组织SQL语句,要完全对应
 3)建RPT文件,不要用向导。生成后,在数据专家中,选择:创建新连接--ADO.NET(XML)--建立新连接,找到刚建的数据集文件,点击“完成”
     将此数据集加到“选定的表”,确定。
  4)选择“字段资源管理器”,展开数据库字段,把字段拉入RPT文件。
  5)绑定数据与RPT文件:定义一个数据集,用SQL语句数据把数据读入数据集,把数据集绑定到水晶报表。
     这步实际很简单。但要注意,绑定语句用这个:rptDocument.SetDataSource(rptDataSet.Tables[0].DefaultView);

10、权限问题
  水晶报表涉及到文件读写,涉及到的文件夹应当添加 ASP.NET或network service用户的读写权限

11、清除报表缓存:
  网上说,水晶报表并发数是5个,这很危险呀。
  如果超过,就报错,提示数量受管理员限制。
 
  数据集资源释放:ds.Dispose();
  报表内存释放:
  protected void Page_UnLoad(object sender, EventArgs e)
    {
        //建立完页面时,释放报表文档资源
        doc.Close();
        this.Dispose();
        this.ClearChildState();
   

12、DataSet\SqlDataReader选哪个好(网上的,没测试,我用的是前者)
    SqlDataReader优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多。缺点:直到数据读完才可close掉于数据库的连接

 

   (SqlDataReader 读数据是快速向前的。SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。它使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。DataReader需及时显式的close。可及时的释放对数据的连接。)

  Dataset是把数据读出,缓存在内存中。缺点:对内存的占用较高。如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作。优点:只需连接一次就可close于数据库的连接

   *一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用datset比较合适.对SqlDataReader和Dataset的选择取决于程序功能的实现。

13、设置宿客户端缓存的问题
   为防止不刷新,页面加上:<%@ OutPutCache Location="None"%>

14、打印时出现:出现通信错误 将停止打印
   原因:点打印后,报表要重新加载一回,原来放在if(!IsPpstBack){}中的代码不会执行,这样就会缺少一些报表需要的值;
   处理方法:把if(!IsPpstBack){}中的代码拿出来。
   问题:这个效率太低了:翻页、打印都要重新加载,需要完善。
15、[水晶报表]服务器后台自动生成PDF等档案 http://blog.csdn.net/david_520042/article/details/7044482

    如何利用Crystal Report程序来生成PDF版本  http://blog.csdn.net/yanhuaju9/article/details/1576979

  使用水晶报表输出PDF文件(类实例)http://blog.csdn.net/zhangjian01361/article/details/986449

三、设计技术点

    水晶报表采用Visual Basic 的语句和函数

1、设置页面宽度

    节专家--详细资料节--勾选“多列格式化”--布局,设置宽度

    对于有子“详细资料”节的,要选择top“详细资料”节才会显示“多列格式化。

2、Split({案卷表.增2},'*')[1]

    按分隔符分裁字符段,从1开始,不是从0开始

dim arr1() as string
dim ret as string
dim i as number
dim k as number
k=0
arr1=split({盒表.分类名称},"|")
for i=1 to ubound(arr1)
        if k=0 then
            ret=arr1(i)
        else
            ret=arr1(i)+"|"+ret
        end if
        k=k+1
next i

formula=ret

3、Cstr({盒表.盒号}))  转字符函数

4、if isnull({盒表.专业名称})   判断空值

     if isnull({盒表.BH})=false

5、if Length ({盒表.分类号}) > 6  判断字符长度

6、trim({盒表.专业名称}) 清除空格

7、截取字符

Left ({盒表.分类号}, 4)

Right ({盒表.分类号},Length ({盒表.分类号}) - 6 )

left(Cstr({hos_cureHis_ds.fee_time}),4)+'年'+right(left(Cstr({hos_cureHis_ds.fee_time}),6),2)+'月'+right(left(Cstr({hos_cureHis_ds.fee_time}),8),2)+'日'

8、日期格式化

if Month ({盒表.起始时间})=Month ({盒表.结束时间}) then
    cstr(Month ({盒表.起始时间}),0) +"月"
else
    cstr(Month({盒表.起始时间}),0)+"-"+cstr(Month({盒表.结束时间}),0)+"月"

 

参考文章:

0、VS2010下水晶报表的使用总结-从安装到使用到部署,有图有真相

1、VS中创建实例 https://jingyan.baidu.com/article/375c8e1995952c25f2a22986.html

 

2、VS.NET2010水晶报表安装部署[VS2010]:http://blog.csdn.net/jsjpanxiaoyu/article/details/42360659

 

3、VS2010中水晶报表应用与部署: https://www.cnblogs.com/dgjack/archive/2011/09/09/2172240.html

 

4、水晶报表 释放资源|内存:http://blog.csdn.net/a402626926/article/details/5958237

 5. 水晶报表打印总多打一张空白页解决办法:https://zhidao.baidu.com/question/1243334808830986979.html


————————————————

原文链接:https://blog.csdn.net/af_fire/article/details/79407317

你可能感兴趣的:(C#)