zoukankan      html  css  js  c++  java
  • .NET 水晶报表

     

    1、水晶报表的好处
       1)利用水晶报表可以进行数值求平均值,画图等
       2)利用水晶报表可以把文件导出不同的格式(word等)
    2、水晶报表的两种格式
       1)pull模式,不利用DataSet,直接从数据库中取出数据
       2) push模式,使用DataSet,利用它进行数据的加载和处理等
    3. 水晶报表使用的库
       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、读取水晶报表文件
       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);
         crv.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,表示打印所用页
       }

  • 相关阅读:
    优化Http请求、规则1减少Http请求 更新中
    js 验证日期格式
    SQL 在OPENQUERY中使用参数
    onpropertychange 和 onchange
    js 去掉空格
    检索 COM 类工厂中 CLSID 为 {000209FF00000000C000000000000046} 的组件时失败解决方法
    C#连接oracle数据库操作
    SQL游标
    MS SQL 设置大小写区别
    vs jquery 智能提示
  • 原文地址:https://www.cnblogs.com/hyd309/p/1561721.html
Copyright © 2011-2022 走看看