zoukankan      html  css  js  c++  java
  • vs2005中水晶报表使用整理

    vs2005中水晶报表实现
     这方面的文章其实非常之多,但因为太多就有些乱,而且CrystalReport的版本不同使用上也有些区别,
    前段时间正好需要vs2005下面报表的解决方案,就参考了下网上的资料,整理了一下。

    push模式和pull模式
    不论是推模式还是拉模式都应使用ReportDocument和ReportViewer两个控件完成报表的数据加载和数据展现。
    这样可以将表示层和基础业务逻辑分开,ReportDocument解决报表的封装,CrystalReportView解决报表的展现。
    还有一种做法是使用CrystalReportViewer和CrystalReportSource控件
    CrystalReportViewer的ReportSourceID属性指定数据的来源
    CrystalReportSource控件指定rpt模板,如果模板中设置了过滤参数,可以用ControlID和界面中的数据选择控件
    关联,这种方法和sqldatasource很相似,但是这种使用方式会丧失灵活性,逻辑层次也不明确,和对sqldatasource
    的态度一样,不太赞成使用。


    方式一:拉
    ReportDocument.load("模板.rpt");
    ReportDocument.SetDatabaseLogon("name","password")
    //ReportDocument.SetDataSource()
    CrystalReportViewer.ReportSource =ReportDocument
    方式二:推
    构造sql
    根据sql得到datatable
    ReportDocument.load("模板.rpt");
    ReportDocument.SetDatabaseLogon("name","password")
    //这里ds可以是dataset或者datatable也可以,这部也是和方法一的主要区别
    ReportDocument.SetDataSource(datatable)
    CrystalReportViewer.ReportSource =ReportDocument
    报表的数据来源已经不是报表模板使用拉模式获得了,是推模式的一种实现
     这样实现的好处是这里的sql是由页面输入条件动态构造出的,可以实现按条件的动态查询。不使用强类型dataset,用datatable非常方便。
     这种方式和以前用pb构造动态datawindow的方式一样,我使用起来觉的还是很顺手的。
     容易实现的优点从安全性上看就变成了缺点,页面输入拼装sql,安全性不高。

    如果涉及多个表,sql很长构造麻烦的情况,使用第二种可能不是很方便。那么在第一种方法下能否实现where条件的动态变化呢
    这时可以使用公式筛选记录的方法实现:
    ReportDocument.DataDefinition.RecordSelectionFormula = "{**}= " textBox1.Text ;
    筛选条件也可以根据页面输入动态构造
    我的理解是数据从数据库中拉来后再使用过滤条件进行过滤的方式,性能会不好控制。
    当然也可以使用CrystalReportViewer控制过滤,比如
    crystalReportViewer1.SelectionFormula = "{**}= " textBox1.Text;
    但是按照表示层和基础业务逻辑分开的原则,用ReportDocument更加自然。在vs2005的帮助中有完整的帮助和示例。

    要按照使用环境限制,适当选择实现方式。
    去年有个多维报表的项目用sqlserver2005的reportservice做的,现在来看水晶报表也完全可以,而且水晶报表也能实现切片和钻取的效果。建立交叉表,两个数据在两个维度变化。尤其是数据源非sqlserver2005的情况下,还是非常好的选择。

    技巧:
    1.非交叉表实现单元格合并,网上的意见都是无法实现,后来在一个网站上看到了实现方法,虽然不自然,但是效果可以出来,如图。

                                                                效果

                                                    设计界面
    需要合并的单元格都设置为组,并在“节专家”,选择你的组页眉,右边“公用”中选中“延伸到后续节”。设置对象格式,上边框为单线。
    在设计时预览都没有问题,但是嵌入网页运行后,不知道为什么线都丢失了。没办法,再插入线,在设计时预览线条会粗些,但是运行时刚好。
    这是野路子的实现。

  • 相关阅读:
    myeclipse 自动部署web项目(自动编译)
    A股、B股区别
    vi分屏指令
    并发用户数与TPS之间的关系
    单台机器安装zookeeper
    Flask-sqlalchemy使用alembic迁移模型_示例1
    Excel VBA 判断是否打开了某个Excel文件
    Excel VBA 从一个带文件夹名和文件名的字符串里提取文件夹名和文件名
    混合编程 从Excel VBA里调用Python模块文件
    Excel VBA 如何在工作表上使用Option Button按钮
  • 原文地址:https://www.cnblogs.com/lodestar/p/907827.html
Copyright © 2011-2022 走看看