详解C#调用水晶报表的实现

开发 后端
针对C#调用水晶报表的开发过程中经常会遇到的问题,我们来看看C#调用水晶报表的实现需要注意什么,以及具体的实现过程。

C#调用显示水晶报表是我们开发中经常会遇到的实用需求,那么C#调用水晶报表具体的操作是什么呢?C#调用水晶报表需要注意什么以及涉及到的方法的使用情况是什么呢?下面让我们看看具体的开发实例:

C#调用水晶报表实实例演示:

  1. /// ﹤summary﹥   
  2. /// CS下在C#调用水晶报表   
  3. /// 水晶报表在CrystalReport9中定义,  
  4. ///数据源可以是表、视图、存储过程(最后一句必须是select语句),可以包含子报表   
  5. /// 调用实例:LoadReport  
  6. ///(this.crystalReportViewer1,"D:\\66.rpt","kys","hrdb","sa","kys");   
  7. ///   
  8. /// ﹤/summary﹥   
  9. /// ﹤param name="ReportViewer"﹥  
  10. 报表浏览器CrystalDecisions.Windows.Forms.CrystalReportViewer  
  11. ﹤/param﹥   
  12. /// ﹤param name="StrRptPaht"﹥报表文件的路径﹤/param﹥   
  13. /// ﹤param name="StrServer"﹥服务器﹤/param﹥   
  14. /// ﹤param name="StrDatabase"﹥数据库﹤/param﹥   
  15. /// ﹤param name="StrUser"﹥登陆名称﹤/param﹥   
  16. /// ﹤param name="StrPassword"﹥密码﹤/param﹥   
  17. public void LoadReport(  
  18. CrystalDecisions.Windows.Forms.CrystalReportViewer   
  19. ReportViewer,string StrRptPaht,   
  20. string StrServer, string StrDatabase,   
  21. string StrUser, string StrPassword)   
  22. {   
  23.  
  24. string StrParaName="";   
  25. string StrRptTableName="";   
  26. string StrLocation="";   
  27. ReportDocument Rpt =new ReportDocument();  
  28. //表示一个报表,并且包含定义、格式化、加载、导出和打印该报表的属性和方法   
  29. SubreportObject SubRptObj;  
  30. //表示放在报表中的子报表。子报表是主报表内的独立或链接的报表。   
  31. ReportDocument SubRpt;   
  32.  
  33. ParameterFields ParamFields=new ParameterFields();   
  34. ParameterField ParamField ;   
  35. ParameterDiscreteValue ParamDiscreteValue;   
  36.  
  37. TableLogOnInfo LogOnInfo;   
  38.  
  39. try   
  40. {   
  41. //C#调用水晶报表之加载报表   
  42. Rpt.Load(StrRptPaht);   
  43. //报表参数的赋值*******C#调用水晶报表**   
  44.  
  45. foreach(CrystalDecisions.CrystalReports.  
  46. Engine.ParameterFieldDefinition ParaFieldDef   
  47. in Rpt.DataDefinition.ParameterFields )   
  48. {   
  49. //只为主报表的参数进行赋值   
  50. if(ParaFieldDef.ReportName=="")   
  51. {   
  52. StrParaName=ParaFieldDef.Name;   
  53.  
  54. ParamField=new ParameterField();   
  55. ParamDiscreteValue=new ParameterDiscreteValue();   
  56. ParamField.ParameterFieldName = StrParaName;   
  57. //注:用户自定义为参数赋值!!!!!!!!!!!!!!!!!!!!!!!!!   
  58. if(StrParaName.ToLower()=="depid")   
  59. ParamDiscreteValue.Value = "dg00";   
  60. else   
  61. ParamDiscreteValue.Value = "ky0001";   
  62. //C#调用水晶报表   
  63. ParamField.CurrentValues.Add (ParamDiscreteValue);   
  64. ParamFields.Add (ParamField);   
  65. }   
  66. }   
  67. //C#调用显示水晶报表**   
  68. // 将参数字段集合放入查看器控件。   
  69. if(ParamFields.Count﹥0)   
  70. ReportViewer.ParameterFieldInfo = ParamFields;   
  71.  
  72. //设置数据库连接参数   
  73. ConnectionInfo CnInfo = new ConnectionInfo();   
  74. CnInfo.ServerName = StrServer;   
  75. CnInfo.DatabaseName = StrDatabase;   
  76. CnInfo.UserID = StrUser;   
  77. CnInfo.Password = StrPassword;   
  78. foreach( CrystalDecisions.CrystalReports.  
  79. Engine.Table DTable in Rpt.Database.Tables)   
  80. {   
  81. LogOnInfo=DTable.LogOnInfo;   
  82. LogOnInfo.ConnectionInfo=CnInfo;   
  83. DTable.ApplyLogOnInfo(LogOnInfo);   
  84. //更换服务器数据库验证   
  85. StrRptTableName=DTable.Location.Substring(  
  86. DTable.Location.LastIndexOf(".") + 1);   
  87. StrLocation=StrDatabase+".dbo."+StrRptTableName;   
  88. DTable.Location=StrLocation;   
  89.  
  90.  
  91. #region 对所有子报表更换服务器数据库验证   
  92. //获取主报表的所有子报表   
  93. foreach (ReportObject obj in Rpt.  
  94. ReportDefinition.ReportObjects)   
  95. {   
  96. //判断是否为子报表对象   
  97. if (obj.Kind == ReportObjectKind.SubreportObject)   
  98. {   
  99. SubRptObj = (SubreportObject) obj;   
  100. SubRpt = Rpt.OpenSubreport(SubRptObj.SubreportName);   
  101.  
  102. //读取子报表的所有数据库表   
  103. foreach (CrystalDecisions.CrystalReports.  
  104. Engine.Table DTable in SubRpt.Database.Tables)   
  105. {   
  106. LogOnInfo = DTable.LogOnInfo;   
  107. LogOnInfo.ConnectionInfo = CnInfo;   
  108.  
  109. //加载数据库连接信息   
  110. DTable.ApplyLogOnInfo(LogOnInfo);   
  111. //更换服务器和数据库   
  112. StrRptTableName=DTable.Location.Substring(  
  113. DTable.Location.LastIndexOf(".") + 1);   
  114. StrLocation=StrDatabase+".dbo."+StrRptTableName;   
  115. DTable.Location=StrLocation;   
  116. }   
  117. }   
  118.  
  119. #endregion   
  120.  
  121. //将报表赋给报表浏览器   
  122. ReportViewer.ReportSource=Rpt;   
  123. //ReportViewer.RefreshReport();   
  124.  
  125. }   
  126. catch(Exception ee)   
  127. {   
  128. string StrMsg=ee.Source+ee.Message;   
  129. System.Windows.Forms.MessageBox.Show(StrMsg);   
  130.  
  131. }   
  132. }  

C#调用水晶报表的基本内容就向你介绍到这里,希望那个对你了解和学习C#调用水晶报表有所帮助。

【编辑推荐】

  1. 搞定C#创建PDF文件的五大步骤
  2. C#创建一个文件的具体实现浅析
  3. C#打开一个文件的操作详解
  4. C#实现string和byte数组的转换
  5. C# Byte数组转换String详解
责任编辑:仲衡 来源: CSDN
相关推荐

2009-08-31 15:11:23

C#调用水晶报表

2009-08-31 16:01:28

C#水晶报表数据获取方

2009-09-07 19:03:08

2009-08-02 11:48:58

ASP.NET水晶报表ASP.NET

2009-11-05 14:03:28

Visual Stud

2009-07-29 09:29:06

ASP.NET水晶报表

2009-12-15 17:20:07

VS 水晶报表

2009-07-30 13:57:39

ASP.NET水晶报表ASP.NET

2010-01-14 10:52:13

VB.NET水晶报表

2009-08-31 16:09:42

.net水晶报表使用学

2009-10-16 13:30:51

VB.NET水晶报表控

2009-12-01 13:50:19

VS2003水晶报表

2009-08-25 17:00:32

ASP.NET水晶报表

2009-11-26 13:27:10

VS2003水晶报表

2009-11-26 13:40:53

2009-08-03 13:13:52

C#调用Outlook

2009-09-02 10:49:46

C#调用析构方法

2009-08-25 17:43:17

C#串口监听

2009-08-31 16:23:13

C#接口

2009-08-25 18:04:30

C#实现Singlet
点赞
收藏

51CTO技术栈公众号