水晶报表使用经验(不断扩充中)

一:水晶报表获取数据库字段前一段的课程中我讲了关于如何获取报表的数据库字段,当时讲的方法是使用OLE DB建立新的数据链接,通过SQL语句来获取要在报表中绑定的数据库字段的,从而避免了使用强类型数据集,实际上这是使用了PULL模式,在实际应用上它会两次链接到数据库,会造成性能损失。
               
下面我介绍一下使用仅字段定义方法来获取数据库字段:

  1.       1:建立新报表。

          2:在数据库专家中选择创建新连接中的仅字段定义。如下图:



在弹出的窗体中选择创建文件,如下图:

 

在弹出的数据库定义工具中输入字段名称、选择字段类型即可编辑所需要的字段了, (如下图)。

 

创建完字段后关闭窗体,弹出窗体,选择“保存”会生成ttx类型的文件,(如下图),此文件无须放到项目中,删掉也无所谓,亦可以保留以待日后更改。

 

       以上是通过“仅定义字段”方法来获取绑定字段的方法。通过这种方法来获取字段更快捷灵活,且不会占用数据库资源,而且也不用使用强类型数据集。

二:样式表的应用。初始状态:一个web页,一个CrystalReportViewer控件,使用CrystalReportViewer控件加载rpt文件。实现方法有两种:1:在web页的Html编码内进行样式表的引用,然后在rpt文件中的要进行设置的对象的CssClass属性写入样式名称即可。2:在CrystalReportViewer控件的CssFileName属性中写入样式表文件的相对路径,然后再在rpt文件中在设置即可。

三:含有子报表的报表的显示问题。初始:使用“仅字段定义”方法定义了两个表,一个用在主报表上,一个用在子报表上。设计完报表后,示例代码如下:

        RPT.PingShenForLiGang rpt = new CRForCA.RPT.PingShenForLiGang();

        System.Data.DataSet  ds = BuildDS();

        rpt.SetDataSource(ds);

        this.CrystalReportViewer1.ReportSource = rpt;

     这样做在运行时会弹出窗体要什么验证的,所以需要对子报表的数据进行绑定,那么,如何解决呢?

    引用命名空间:using CrystalDecisions.CrystalReports.Engine;

 

    以上代码改为:

    RPT.PingShenForLiGang rpt = new CRForCA.RPT.PingShenForLiGang();

    System.Data.DataSet  ds = BuildDS();

    //获取子报表
   
SubreportObject oSubreport1 = (SubreportObject)rpt.DetailSection3.ReportObjects["Subreport5"];

    ReportDocument oSub1 = oSubreport1.OpenSubreport("mytest");

    //绑定子报表
    oSub1.SetDataSource(ds); 

    //绑定主报表
    rpt.SetDataSource(ds); 

    this.CrystalReportViewer1.ReportSource = rpt;

 

    需要对子报表在进行数据绑定,这样就会解决这个问题了。

四: 控制水晶报表中的对象。以文本对象为例。 

引用命名空间:using CrystalDecisions.CrystalReports.Engine; 

代码如下:

RPT.PingShenForLiGang rpt = new CRForCA.RPT.PingShenForLiGang(); 

       System.Data.DataSet  ds = BuildDS();

rpt.SetDataSource(ds);

TextObject text ;

text = (TextObject)rpt.ReportDefinition.ReportObjects["txtTitle"];

 //显示的值
    text.Text = Hello; 

        this.CrystalReportViewer1.ReportSource = rpt;


五:公式的高级应用(1)

 

问题描述:数据库有一文本字段“Result ,用来记录“A 、“B 、“C”等值(业务要求),在报表页脚中需要对这一字段统计,统计的形式为
A
B
A

 

即要求对“Result”字段的所有值分行在页脚中显示。

 

解决方案:这个问题我想难点在于如何换行。水晶报表可以解析html,那么我们可以通过循环获取“Result”的值加上html换行标记<br>,是不是就可以实现了呢?简单试了一下,完全OK

下面介绍如何实现:

新建一个公式字段“SumResult ,将之拖到报表页脚位置。编辑公式。代码如下(Basic语法):

global myout as string

WhileReadingRecords

myout =  myout & {Test.Result}  &"<br>"

formula = myout

 

编辑完毕保存。先别急还要再设置公式字段的格式。右键点击报表中的公式字段,选择弹出菜单的“设置字段格式” ,在“公用”里选择“可以扩大” (必须选择,以保证文本对象中的内容可以显示完全),在“段落”的“文本解释”中选择“Html文本” (必须选择,否则就会显示“<br> 了),即可实现了。



(未完待续)

posted on 2006-03-02 21:21  皮皮虾的blog  阅读(1499)  评论(0编辑  收藏  举报