中易网

如何在VS2010使用水晶报表组件

答案:2  悬赏:20  
解决时间 2021-03-24 15:08
如何在VS2010使用水晶报表组件
最佳答案
VS2010不在像VS2008及以前版本那样支持Crystal Report了,不过SAP公司还是很给劲的,随即发布了CR for2010的免费开放版。虽然如此,但刚上手使用的朋友们可能还是很费周折。下简述使用。
  如果只是为了能够在VS2010中运行有报表的程序,则可以简单的将运行程序所需的dll引入项目即可。如果你的机器没有这些组件可以来这下载:点我。一般只需要引用
  CrystalDecisions.CrystalReports.Engine.dll、CrystalDecisions.Shared.dll和
  CrystalDecisions.Web.dll即可。下载后将其放入web/bin下,然后引用它们就可以了。 上述只适用于运行他人编写的有关报表的项目,做为开发者则还需进行其他工作。
  VS2010不在支持Crystal report的设计,我们下载SAP公司的免费版(for VS2010)来设计即可(设计过程同在VS2008中没什么区别,只是环境独立了)。随后将我们设计的第一个报表文件crTeacherWorkLoad.rpt文件拷贝到项目App_Data中。
  我们使用CryStalReportViewer控件来显示刚才设计好的rpt文件。VS2010IDE工具箱中不包含该控件,如果你安装了CR for VS2010则可以使用如下方法来显示该控件:

  如果没有此控件则可以直接将此控件的代码放入所需的aspx页面中,然后在这个aspx页面内注册此控件。
  控件代码如下所示:




  [xhtml]view plaincopyprint?
  1.   2. AutoDataBind="true"DisplayGroupTree="false"Height="50px"Width="350px"/>
   注册代码放到页面头头,代码如下所示:
  [xhtml]view plaincopyprint?
  1. <%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral,
  PublicKeyToken=692fbea5521e1304"
  2. Namespace="CrystalDecisions.Web"TagPrefix="CR" %>
  <%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %> 如此以来再有了前面的三个dll的引用,就可以使用此控件来显示所需要的报表内容了。显示过程代码如下所示:
  [c-sharp]view plaincopyprint?
  1. //加载报表文件,设置报表源
  2. ReportDocumentreportDocument = new ReportDocument();
  3. reportDocument.Load(Server.MapPath("../../App_Data/crTeacherWorkLoad.rpt")); 4. reportDocument.SetDataSource(DtAllTeacherWorkLoad);//);//DtAllTeacherWorkLoad是查询
  出来的DataTable,其字段同rpt文件字段相同 5. 6.
  7. CrystalReportViewer1.ReportSource = reportDocument; 8. //将数据库信息传递给报表 9. //定义水晶报表的数据库连接信息
  10. ConnectionInfoconnectionInfo = new ConnectionInfo();



  11. string aservername, bDBName, cUserId, dPwd; 12. //获取服务器名、数据库名,登录名,密码
  13. aservername = System.Configuration.ConfigurationManager.AppSettings["ServerName"]; 14. bDBName = System.Configuration.ConfigurationManager.AppSettings["DataBase"]; 15. cUserId = System.Configuration.ConfigurationManager.AppSettings["UserId"]; 16. dPwd = System.Configuration.ConfigurationManager.AppSettings["PassWord"]; 17. connectionInfo.DatabaseName = bDBName; 18. connectionInfo.UserID = cUserId; 19. connectionInfo.Password = dPwd;
  20. connectionInfo.ServerName = aservername; 21.
  22. //SetDbLoginForReport(connectionInfo); 23.
  24. TableLogOnInfostableLogOnInfos = CrystalReportViewer1.LogOnInfo; 25.
  26. foreach (TableLogOnInfotableLogOnInfo in tableLogOnInfos) 27. { 28.
  29. tableLogOnInfo.ConnectionInfo = connectionInfo; 30. 31. }
  [csharp]view plaincopyprint?
  1. //加载报表文件,设置报表源 ReportDocument reportDocument = new ReportDocument();
  [csharp]view plaincopyprint?
  1. reportDocument.Load(Server.MapPath("../../App_Data/crTeacherWorkLoad.rpt"));
  [csharp]view plaincopyprint?
  1. reportDocument.SetDataSource(DtAllTeacherWorkLoad);//);
  [csharp]view plaincopyprint?



  1. //DtAllTeacherWorkLoad是查询出来的DataTable,其字段同rpt文件字段相
  同 CrystalReportViewer1.ReportSource = reportDocument;
  [csharp]view plaincopyprint?
  1. //将数据库信息传递给报表
  [csharp]view plaincopyprint?
  1. //定义水晶报表的数据库连接信
  息 ConnectionInfo connectionInfo = new ConnectionInfo(); string aservername, bDBName, cUserId, dPwd;
  [csharp]view plaincopyprint?
  1. //获取服务器名、数据库名,登录名,密
  码 aservername = System.Configuration.ConfigurationManager.AppSettings["ServerName"];
  [csharp]view plaincopyprint?
  1. bDBName = System.Configuration.ConfigurationManager.AppSettings["DataBase"];
  [csharp]view plaincopyprint?
  1. cUserId = System.Configuration.ConfigurationManager.AppSettings["UserId"];
  [csharp]view plaincopyprint?
  1. dPwd = System.Configuration.ConfigurationManager.AppSettings["PassWord"];
  [csharp]view plaincopyprint?
  1. connectionInfo.DatabaseName = bDBName; connectionInfo.UserID = cUserId;
  [csharp]view plaincopyprint?



  1. connectionInfo.Password = dPwd; connectionInfo.ServerName = aservername;
  [csharp]view plaincopyprint?
  1. //SetDbLoginForReport(connectionInfo);
  [csharp]view plaincopyprint?
  1. TableLogOnInfos tableLogOnInfos = CrystalReportViewer1.LogOnInfo;
  [csharp]view plaincopyprint?
  1. foreach (TableLogOnInfo tableLogOnInfo in tableLogOnInfos)
  [csharp]view plaincopyprint?
  1. { tableLogOnInfo.ConnectionInfo = connectionInfo; }

  本文讲了三个小问题,一是如何引用所需dll显示报表文件,二是如何注册CrystalReportViewer控件,三是如何使CrystalReportViewer控件显示报表数据。至于报表文件(rpt)的设计则要学习Crystal Report 10软件的使用了!
全部回答
在vs2010中新建一个“windows 窗体应用程序”项目,在该项目中添加一个水晶报表“crystalreport1.rpt”,然后在项目上点击鼠标右键属性,将“目标框架”改为“.net framework 4” 打开app.config文件,在“startup”节点一个“uselegacyv2runtimeactivationpolicy="true"”属性 代码如下: 在form1窗体中,从工具箱拖出一个crystal report viewer控件,双击form窗体,是双击form窗体,不是crystal report viewer,在后台的form_load事件中写入如下代码: 代码如下: private void form1_load(object sender, eventargs e) { string connstr = "data source=.\\sqlexpress;initial catalog=dbtest;user id=sa;password=test"; sqlconnection conn = new sqlconnection(connstr); conn.open(); try { string sql = "select * from customer where email!='[email protected]'"; sqldataadapter sda = new sqldataadapter(sql, conn); dataset ds = new dataset(); sda.fill(ds, "tmptable"); string reportpath = system.windows.forms.application.startuppath + @"\crystalreport1.rpt"; reportdocument rd = new reportdocument(); rd.load(reportpath); rd.setdatasource(ds.tables[0].defaultview); this.crystalreportviewer1.reportsource = rd; } catch (exception ex) { throw new exception(ex.message.tostring()); } finally { conn.close(); } } 这样就ok了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
自然风光是什么意思
问一下许昌或郑州到苏州的火车
孕妇吃什么奶粉比较好呢?我想去香港买孕妇奶
一般的深山会有名贵的玉石吗?
西安医学院有大专吗
液晶电视与LED电视的工作原理
中国电信(雪枫路营业厅)地址在什么地方,我要
0.023596保留5个有效数字是多少
看到家里恨乱又脏心里就来气,心情就很乱这是
日语“八格牙路斯拉斯拉地”是什么意思?
在网上买的火车票,买的上铺,有什么办法再换
宇都宫大学国际学研究科和早稻田大学亚太研究
莫如静好 的出处
台州职业技术学院和浙江国际海运职业技术学院
天津站到天津海河教育园区雅深路2号
推荐资讯
J色的大钻石大家觉得荧光好不好
大家给介绍点反映中国边疆民族风情的经典电影
大众 速腾, 标致 508选择哪个?
58怎么取消付费推送
领军教育(山阳校区)地址在什么地方,我要处理
湖北利川芳芳广场舞《情花为谁开》就爱舞蹈网
“真”的由来或意思是什么
我家母狗又在家里撒尿拉屎 还在车上拉屎撒尿
妈妈去世两周了,昨晚却梦见妈妈坐在爸爸开的
武汉亲子鉴定哪家好?》
一个等腰三角形,他的一个底角是70°,其他两
跪求大侠指点一下苏州哪里有卖那种西洋参切片
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?