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

27 篇文章 0 订阅

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#调用水晶报表有所帮助。

转自:http://developer.51cto.com/art/200908/148376.htm

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要在C#使用DataTable和Crystal Reports来生成报表,可以按照以下步骤进行操作: 1. 首先,确保已经添加了Crystal Reports插件到你的项目中。你可以通过右键点击项目文件,选择"添加"->"新项"->"报表"来添加。 2. 创建一个DataTable对象,并向其中添加数据。你可以使用Add方法来逐行添加数据,或者使用Load方法从其他数据源加载数据。 ```csharp DataTable dataTable = new DataTable(); dataTable.Columns.Add("Column1"); dataTable.Columns.Add("Column2"); dataTable.Rows.Add("Value1", "Value2"); // 添加更多的行和数据... // 或者从其他数据源加载数据 // dataTable.Load(dataReader); ``` 3. 创建一个Crystal Reports的报表对象,并设置其数据源为刚刚创建的DataTable。 ```csharp using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; ReportDocument report = new ReportDocument(); report.Load("YourReportFile.rpt"); // 替换为你的报表文件路径 report.SetDataSource(dataTable); ``` 4. 最后,将报表对象显示在Crystal Reports查看器中或导出为其他格式。 ```csharp using CrystalDecisions.Windows.Forms; CrystalReportViewer crystalReportViewer = new CrystalReportViewer(); crystalReportViewer.ReportSource = report; crystalReportViewer.Refresh(); // 刷新查看器 // 或者导出为PDF等其他格式 // report.ExportToDisk(ExportFormatType.PortableDocFormat, "YourExportFile.pdf"); ``` 这些是基本的步骤,你可以根据自己的需求进行进一步的定制和调整。希望对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值