.NET水晶报表简单使用



原文章来源:http://hi.baidu.com/xtb218/blog/item/97b2b7f8b8bf191dd8f9fd98.html

.NET水晶报表首先要从概念入手,水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。

1、.NET水晶报表的好处

1)利用水晶报表可以进行数值求平均值,画图等

2)利用水晶报表可以把文件导出不同的格式(word等)

2、.NET水晶报表的两种格式

1)pull模式,不利用DataSet,直接从数据库中取出数据

2) push模式,使用DataSet,利用它进行数据的加载和处理等

3. .NET水晶报表使用的库

1)水晶报表的引擎(CREnging.dll),作用:合并数据,装换格式

2)水晶报表设计器(CRDesigner.dll),作用:设计标题,插入数据等

3)水晶报表查看控件(CRWebFormViewer.DLL)

4)需要引入的命名空间

using CrystalDecisions.CrystalReports.Engine;   using CrystalDecisions.Shared;  

4、Pull模式下使用水晶报表

1)创建rpt文件

2)拖放CrystalReportViewer

3)绑定

5、读取.NET水晶报表文件

private void ReadCRV(cryatalReportViewer crv)     {       openFileDialog dlg=new OpenFileDialog();       dlg.Title="打开水晶报表文件";       dlg.Filter="水晶报表文件(*.rpt)|*.rpt|所有文件|*.*";       if(dlg.showDialog()==DialogResult.OK)       {         crv.ReportSource=dlg.FileName;       }     } 

6. B/S下读取报表的文件

private void ReadCRV(cryatalReportViewer crv,File file)     {       string strName=file.PostedFile.FileName;       if(strName.Trim()!="")       {         crv.ReportSource=strName        Session["fileName"]=strName;       }     } 

在B/S中要防止数据源的丢失

priavte void Page_Load(object sender,System.EventArgs e)      {        if(Session["fileName"]!=null)        {          crv.ReportSource=Session["fileName"].ToString();        }      } 

7. 假如直接从数据库中读取数据

采用PULL模式可能出现错误(登录的用户名和密码不对)

private void ReadCRV(CrystalReportViewer crv,CrystalReport cr)     {        ReportDocument reportDoc=new ReportDocument();        reportDoc.Load(Server.MapPath(cr));//要加载的rpt文件的名字        //解决登录的问题        TableLogOnInfo logonInfo = new TableLogOnInfo();        foreach(Table tb in ReportDoc.Database.Tables)        {          logonInfo=tb.LogOnInfo;          logonInfo.ConnectionInfo.ServerName="(loacl)";          logonInfo.ConnectionInfo.DatabaseName="Pubs";          logonInfo.ConnectionInfo.UserId="sa";          logonInfo.ConnectionInfo.Password="";          tb.ApplyLogOnInfo(logonInfo);        }        crv.ReportSource=reportDoc;     } 

8. 采用Push模式,直接在数据源读取

private void BindReport(CrystalReportViewer crv)    {      string strProvider="Server=(local);DataBase=pubs;uid=sa;pwd=";      CrystalReport cr=new CrystalReport();      DataSet ds=new DataSet();      SqlConnection conn=new SqlConnection(strProvider);      conn.open();      string strSql="select * from jobs";      SqlDataAdapter dap=new SqlDataAdapter(strSql,conn);      adp.Fill(ds,"jobs");      cr.SetDataSource(ds);      crcrv.ReportSource=cr;    } 

9. 导出水晶报表的文件

private void ExportCrv(CrystalReport cr)     {        DiskFileDestionOptions dOpt=new DiskFileDestionOptions();        cr.ExportOptions.ExportDestinationType=ExportDestinationType.DiskFile();        cr.ExportOptions.ExportFormatType= ExportFormatType.PortableDocFormat;        dOpt.DiskFileName="C:\output.pdf";        cr.ExportOptions.DestinationOptions=dOpt;        cr.Export();             }     private void ExportCrv(CrystalReport cr,string strType,string strPath)     {        DiskFileDestionOptions dOpt=new DiskFileDestionOptions();        cr.ExportOptions.ExportDestinationType=ExportDestinationType.DiskFile();        switch(strType)        {           case "RTF":             cr.ExportOptions.ExportFormatType=ExportFormatType.RichText;             dOpt.DiskFileName=strPath;             break;           case "PDF":             cr.ExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;             dOpt.DiskFileName=strPath;             break;           case "DOC":             cr.ExportOptions.ExportFormatType=ExportFormatType.WordForWindows;             dOpt.DiskFileName=strPath;             break;           case "XLS":             cr.ExportOptions.ExportFormatType=ExportFormatType.Excel;             dOpt.DiskFileName=strPath;             break;           default;           break;                     }        cr.ExportOptions.DestinationOptions=dOpt;        cr.Export();      } 

10 B/S下水晶报表的打印

priavte void PrintCRV(CrystalReport cr)     {       string strPrinterName=@"printName";       PageMargins margins=cr.PrintOptions.PageMargins;       margins.bottomMargin = 250;       margins.leftMargin = 350;       margins.rightMargin = 350;       margins.topMargin = 450;       cr.PrintOptions.ApplyPageMargins(margins);       cr.PrintOptions.printerName=strPrinterName;       cr.PrintToPrinter(1,false,0,0)//参数设置为0,表示打印所用页     }

你可能感兴趣的:(.net,数据库,session,开发工具,报表,dataset)