Crystal Report在.net中的两种显示方式

原文: Crystal Report在.net中的两种显示方式

Crystal Report在.net中的两种显示方式

编写人:CC阿爸

 

2014-7-29

 

近来在完成深圳一公司的项目,对方对各方面要求相当严格,一不满意就拒绝签收,为了对修正水晶报表显示及导出的一些小问题,无赖之下,仔细了解一下水晶报表的操作方法,逼苦我们这些苦逼的程序,虽说在以前的项目中,也常使用crystal report 来制作报表。并且针对webwinform 都各有不同的地方。

 

但总的来讲:显示水晶报表目前使用控件对象的有两种显示方式

1.      使用crystalReportViewer1 来显示报表

2.      使用Crystal ActiveX report viewer 来显示报表

 

在使用前,先废话一下有关水晶报表的一些版本的问题:

1.      我接触的第一个是7.0的版本。有一些vb程序的程序都在使用这个版本的报表

2.      后来使用上.net开发工具后,直接升到了crystal report 9.0

3.      Vs 2008 内置了10.5的水晶报表。但这个版本在官方是没有的。

因此我制作报表时仍使用的是为10.0

4.      后来水晶报表先后推出了11  2008,现到1314

5.      最后想说的,这中间sap收购了水晶报表,现查找技术文档只能在sap网站上查找了。

 

接下来。废话就不多讲了,将我们使用的代码贴出来供大家参考,发扬互联网的共享精神。让苦逼的程序猿们也少走点冤枉路了。

开发环境:vs 2008+crystal report 10

 

 

使用crystalReportViewer1 来显示报表

Crystal Report在.net中的两种显示方式_第1张图片 

  1   public  partial  class ShowRPT : Form
  2     {
  3          private XOS.Admin.ShowForm pParentWin =  null;
  4          protected  string FileState =  "";
  5         WinBase.Common W1 =  new WinBase.Common();
  6           // 这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
  7          ReportDocument oRpt =  new ReportDocument();
  8          public ShowRPT(XOS.Admin.ShowForm WinMain)
  9         {
 10             InitializeComponent();
 11             pParentWin = WinMain;
 12         }
 13 
 14          private  void ShowRPT_Load( object sender, EventArgs e)
 15         {
 16             ShowForm form1 = Application.OpenForms[ " ShowForm "as ShowForm;
 17             TableLogOnInfo logOnInfo =  new TableLogOnInfo();
 18             ReplaceExportButton(); // 新增一个工具栏自定义导出excel
 19             
 20              try
 21             {
 22                  string strg = pParentWin.ReportPath +  " \\ " + pParentWin.ReportName;
 23                 oRpt.Load(strg);
 24                 FileState =  " YES ";
 25             }
 26              catch (System.Exception err)
 27             {
 28                 FileState =  " NO ";
 29                 MessageBox.Show(err.Message,  " 错误提示:读取报表文件错误 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
 30 
 31                  // return;
 32 
 33             }
 34              if (FileState ==  " YES ")
 35             {
 36                 logOnInfo.ConnectionInfo.ServerName = W1.LoadXmlFileValue( " config.xml "" Sys "" HostName ");
 37                 logOnInfo.ConnectionInfo.DatabaseName = W1.LoadXmlFileValue( " config.xml "" Sys "" DataBase ");
 38                 logOnInfo.ConnectionInfo.UserID = W1.Decrypt(W1.LoadXmlFileValue( " config.xml "" Sys "" User "));
 39                 logOnInfo.ConnectionInfo.Password = W1.Decrypt(W1.LoadXmlFileValue( " config.xml "" Sys "" Password "));
 40                 oRpt.Database.Tables[ 0].ApplyLogOnInfo(logOnInfo);
 41                  // 建立.rpt文件与CryStalReportviewer文件之间的连接
 42                   // 参数
 43                   try
 44                 {
 45                     DataSet ds =  new DataSet();
 46                      string _strSql =  " SELECT  P.*,RP.* FROM ReportParameter RP,Report P where RP.ReportName=P.ReportName AND P.ReportName=' " + pParentWin.ReportName +  " ' order by RP.ID  ";
 47                     ds = W1.DS(_strSql,  " Sys ");
 48                      // 动态修WinForm的Text[Report表中ReportDescription]
 49                       this.Text =  this.Text + ds.Tables[ 0].Rows[ 0][ " ReportName "].ToString() +  "   " + ds.Tables[ 0].Rows[ 0][ " ReportDescription "].ToString();
 50                      for ( int i =  0; i < ds.Tables[ 0].Rows.Count; i++)
 51                     {
 52                         oRpt.SetParameterValue(i, form1.str[i]);
 53 
 54                     }
 55                 }
 56                  catch (System.Exception err)
 57                 {
 58                     FileState =  " NO ";
 59                     MessageBox.Show(err.Message,  " 错误提示:读取报表参数错误 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
 60                      // return;
 61 
 62                 }
 63                 ParameterFields parameterFields = crystalReportViewer1.ParameterFieldInfo;
 64                 crystalReportViewer1.ReportSource = oRpt;
 65                 crystalReportViewer1.ShowRefreshButton =  false;
 66 
 67             }
 68         }
 69 
 70          private  void btnExportExcel_Click( object sender, EventArgs e)
 71         {          
 72 
 73                  //  声明变量并获取导出选项。
 74                  ExportOptions exportOpts =  new ExportOptions();
 75                 ExcelFormatOptions excelFormatOpts =  new ExcelFormatOptions();
 76                 DiskFileDestinationOptions diskOpts =  new DiskFileDestinationOptions();
 77                 exportOpts = oRpt.ExportOptions;
 78                  //  设置 Excel 格式选项。
 79                  excelFormatOpts.ExcelUseConstantColumnWidth =  true;
 80                 exportOpts.ExportFormatType = ExportFormatType.Excel;
 81                 exportOpts.FormatOptions = excelFormatOpts;
 82 
 83                  //  设置磁盘文件选项并导出。
 84                  exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;
 85               SaveFileDialog sf =  new SaveFileDialog();
 86                string FileName = "";
 87                sf.Filter =  " Microsoft Excel(*.xls)|*.xls " ;
 88              //  ……
 89 
 90              /*  sf.DefaultExt = "rtf";
 91               * 这么设起不了作用,还不知道原因何在
 92               * 所以只好手动调整顺序  */
 93 
 94              // 用sf.FilterIndex调整
 95 
 96                 if (DialogResult.OK == sf.ShowDialog())
 97                {
 98                    FileName = sf.FileName;
 99                    diskOpts.DiskFileName = FileName;
100                    exportOpts.DestinationOptions = diskOpts;
101                     try
102                    {
103                        oRpt.Export();
104                        MessageBox.Show( " 导出excel成功! " + diskOpts.DiskFileName,  " 成功提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
105                       
106                    }
107                     catch (System.Exception err)
108                    {
109                        MessageBox.Show(err.Message,  " 错误提示:导出excel失败 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
110                    }
111                }
112             }
113          // 核心
114           private  void ReplaceExportButton()
115         {
116              // 遍历crystalReportViewer1控件里的控件
117               foreach ( object ctl  in crystalReportViewer1.Controls)
118             {
119                  // 取得控件名称
120                   string sControl = ctl.GetType().Name.ToString().ToLower();
121                  // 取得工具条
122                   if (sControl ==  " toolstrip ")
123                 {
124                     ToolStrip tab1 = (ToolStrip)ctl;
125                      // 遍历工具条Item
126                       for ( int i =  0; i <= tab1.Items.Count -  1; i++)
127                     {
128                          // MessageBox.Show(tab1.Items[i].ToolTipText);
129                           // 如果是导出按钮
130                           if (tab1.Items[i].ToolTipText ==  " 导出报表 " || tab1.Items[i].ToolTipText ==  " Export Report ")
131                         {
132                              // 先创建一个ToolStripButton准备替代现有Button
133                              ToolStripButton tbutton =  new ToolStripButton();
134                              // 获取原导出按钮的按钮图片
135                              Image img1 = tab1.Items[i].Image;
136                              // 移除原导出按钮
137                               // tab1.Items.Remove(tab1.Items[i]);
138                               // 设置新button属性
139                              tbutton.Image = img1;
140                             tbutton.ToolTipText =  " 自定义导出Execl报表按钮 ";
141                              // 在原位置上插入新Button
142                              tab1.Items.Insert( 12,tbutton);                            
143 
144                              // 绑定自定义事件
145                              tbutton.Click +=  new System.EventHandler( this.btnExportExcel_Click);
146                              break;
147                         }
148 
149                     }
150                 }
151 
152             }
153         }
154 
155 
156     }

 Crystal Report在.net中的两种显示方式_第2张图片

 1  public  partial  class ShowRPT2 : Form
 2     {
 3          private XOS.Admin.ShowForm pParentWin =  null;
 4          protected  string FileState =  "";
 5         WinBase.Common W1 =  new WinBase.Common();      
 6          public ShowRPT2(XOS.Admin.ShowForm WinMain)
 7         {
 8             InitializeComponent();
 9             pParentWin = WinMain;
10         }
11 
12          private  void ShowRPT2_Load( object sender, EventArgs e)
13         {
14             ShowForm form1 = System.Windows.Forms.Application.OpenForms[ " ShowForm "as ShowForm;
15             TableLogOnInfo logOnInfo =  new TableLogOnInfo();
16             CRAXDDRT.ParameterValues crPara =  new CRAXDDRT.ParameterValues();
17              string strg = pParentWin.ReportPath +  " \\ " + pParentWin.ReportName;
18             System.Windows.Forms.Application.UseWaitCursor =  true;
19             ApplicationClass applicationClass =  new ApplicationClass();
20             CRAXDDRT.Report report =  new  CRAXDDRT.Report();
21            
22              try
23             {
24                 report = applicationClass.OpenReport(strg,  null);
25                 FileState =  " YES ";
26             }
27              catch (System.Exception err)
28             {
29                 FileState =  " NO ";
30                 MessageBox.Show(err.Message,  " 错误提示:读取报表文件错误 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
31 
32                  // return;
33 
34             }
35              if (FileState ==  " YES ")
36             {
37                 logOnInfo.ConnectionInfo.ServerName = W1.LoadXmlFileValue( " config.xml "" Sys "" HostName ");
38                 logOnInfo.ConnectionInfo.DatabaseName = W1.LoadXmlFileValue( " config.xml "" Sys "" DataBase ");
39                 logOnInfo.ConnectionInfo.UserID = W1.Decrypt(W1.LoadXmlFileValue( " config.xml "" Sys "" User "));
40                 logOnInfo.ConnectionInfo.Password = W1.Decrypt(W1.LoadXmlFileValue( " config.xml "" Sys "" Password "));
41                 report.Database.Tables[ 1].SetLogOnInfo(logOnInfo.ConnectionInfo.ServerName, logOnInfo.ConnectionInfo.DatabaseName, logOnInfo.ConnectionInfo.UserID, logOnInfo.ConnectionInfo.Password);
42                  // 建立.rpt文件与CryStalReportviewer文件之间的连接
43                   // 参数
44                 
45                  try
46                 {
47                     DataSet ds =  new DataSet();
48                      string _strSql =  " SELECT  P.*,RP.* FROM ReportParameter RP,Report P where RP.ReportName=P.ReportName AND P.ReportName=' " + pParentWin.ReportName +  " ' order by RP.ID  ";
49                     ds = W1.DS(_strSql,  " Sys ");
50                      // 动态修WinForm的Text[Report表中ReportDescription]
51                       this.Text =  this.Text + ds.Tables[ 0].Rows[ 0][ " ReportName "].ToString() +  "   " + ds.Tables[ 0].Rows[ 0][ " ReportDescription "].ToString();
52                      for ( int i =  0; i < ds.Tables[ 0].Rows.Count; i++)
53                     {
54                         report.ParameterFields.GetItemByName(ds.Tables[ 0].Rows[i][ " ParaName "].ToString(),  null).ClearCurrentValueAndRange();
55                         report.ParameterFields.GetItemByName(ds.Tables[ 0].Rows[i][ " ParaName "].ToString(),  null).AddCurrentValue(form1.str[i]);
56                         //  report.ParameterFields[i].AddCurrentValue(form1.str[i]);
57 
58                     }
59                 }
60                  catch (System.Exception err)
61                 {
62                     FileState =  " NO ";
63                     MessageBox.Show(err.Message,  " 错误提示:读取报表参数错误 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
64                      // return;
65 
66                 }
67                
68                
69             }
70             axCrystalActiveXReportViewer1.ReportSource = report;
71             axCrystalActiveXReportViewer1.ViewReport();
72             System.Windows.Forms.Application.UseWaitCursor =  false;
73         }
74 
75   
76 
77 
78     }

 

你可能感兴趣的:(.net)