水晶报表在ASP.NET中的使用

本文详细介绍如何在分层结构系统中集成水晶报表,并实现报表的显示、打印及导出功能。包括数据准备、报表设计、页面配置及代码实现等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      2007年中有项目要求用到水晶报表,当时查了很多资料,感觉都良莠不齐,尤其是很多文章在水晶报表显示的推模式(push)和拉模式(pull)中反复纠缠,让人感觉明显的捡了芝麻丢了西瓜。而单看 两个名词和英文就知道又是哪个懒惰的前辈生硬翻译过来。写下此文给刚入门的新手一个指点,也是自己学习过程的一个笔记。

      所谓的那些推模式、拉模式以及我看到的很多例程,都明显有一个微软公司的通病(或许应该准确的称之为一种产品的理念),即过于专注于新用户的上手,而没有注意软件工程体系的完善。说明白点就是对于CrystalReport和ObjectDatasource,SQLdatasource控件类似,都能够把所有的联接数据库代码写在ASPX的页面文件上。这样新手可以很快的通过拷贝代码来实现自己的Hello World程序。但是如果用户有一定的开发经验,习惯于分层的系统开发模式,则对其有点勉为其难了。

    进入正题,本文介绍的是在一个分层结构系统中asp.net页面上显示自己的报表,让报表具备打印、导出成为word,pdf等常用格式等能力。分层结构的DAO用ADO.NET的Dataset强类型。

 

1、数据准备

      数据准备可以用存储过程,SQL语句,XSD强类型等等,总之生成一个DataTable或者类的集合

      添加新项=>数据集TableA=>连接数据库,通过生成器生成SQL代码,得到TableA.getData() 方法,该方法返回一个数据表。

2、新增CrystalReport.rpt,CrystalReport.rpt编辑用数据库专家选择ADO.net,把上面准备的TableA拖入其中。再拖拽相应的字段到CrystalReport.rpt的“Section 3:详细资料”中.在“页眉”中会生成相应的字段说明。 拖拽一个文本对象到报表页眉上,命名为"TextHeard".

3、新建一个页面report.aspx,页面上放入控件CrystalReportViewer,CrystalReportSource。其中CrystalReportViewer是我们要显示报表的控件。

4、然后就是代码了

     页面载入事件中要加Databind();

protected   void  Page_Load( object  sender, EventArgs e)
    
{        
        
if (IsPostBack)
        
{
            Bind();
        }
    
    }

   

    
private   void  Bind()
    
{
       
       
        
//取得相关数据信息
       TableAAdapter ad = new TableAAdapter ();
        DataTable dt 
= null;
        
try
        
{
            dt 
= ad.GetData();
        }

        
catch
        
{
            LabelAlert.Text 
= "数据读取失败,请稍后再试";
            
return;
        }


        
if (dt == null || dt.Rows.Count == 0)
        
{
            LabelAlert.Text 
= "没有符合要求的数据";

        }

        
//绑定数据到报表
        CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport1.rpt"));
        
try
        
{
            CrystalReportSource1.ReportDocument.SetDataSource(dt);
        }

        
catch
        
{
            
return;

        }


        TextObject TextHead
= (TextObject)CrystalReportSource1.ReportDocument.ReportDefinition.ReportObjects["TextHead "];
        TextHead.text
="××××报表";    
       
        TextTime.Text 
= TextBoxDateFrom.Text +" ~ " + TextBoxDateTo.Text;


        CrystalReportSource1.DataBind();
        CrystalReportViewer1.ReportSource 
= CrystalReportSource1;
        CrystalReportViewer1.DataBind();
    }

   总结:开发水晶报表总体还是很简单的,毕竟是BusinessObjects的大作。入手关过了就达到了一定的水准了。报表倡导的把所有代码放在CrystalReport.rpt中的理念,我不太认同,这样不容易修改。而自己更习惯于把用SQL来生成报表,在表现层只进行相应的一些格式操作。CrystalReport.rpt可以写很多公式,达到使报表丰富多彩的目的。这里不再赘述。

    另外开发的时候用户曾经要求只能生成PDF文档,而屏蔽WORD文档,颇费了些周章,最后代码就几行。

 (1)屏蔽Crystalreportviewer里面的导出按钮。该按钮把所有的导出格式都完成了,实在是好啊,要是可以单独设置哪些允许导出的格式就好了。

          Cystalreportviewer1.HasExportButton=false;

  (2)新建另外的页面按钮。设置响应事件

  protected   void  Button1_Click( object  sender, EventArgs e)
    
{
          CrystalDecisions.Shared.DiskFileDestinationOptions DiskOpts 
= new CrystalDecisions.Shared.DiskFileDestinationOptions();
        DiskOpts.DiskFileName 
= "d:/demo.pdf";
        CrystalReportSource1.ReportDocument.ExportOptions.ExportDestinationType 
= CrystalDecisions.Shared.ExportDestinationType.DiskFile;

        CrystalReportSource1.ReportDocument.ExportOptions.ExportDestinationType 
= CrystalDecisions.Shared.ExportDestinationType.DiskFile;
         CrystalReportSource1.ReportDocument.ExportOptions.ExportFormatType 
=   CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;


         System.IO.StreamWriter a 
= new System.IO.StreamWriter("d:/demo.pdf");
        
             
         CrystalReportSource1.ReportDocument.ExportToHttpResponse(CrystalReportSource1.ReportDocument.ExportOptions.ExportFormatType,Response, 
true, DiskOpts.DiskFileName);
        
        
    }

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值