【06年博文搬家】水晶报表系列--水晶报表在不同客户端上的加载处理
我们在开发平台上建立的水晶报表,在部署到客户机时,会面临这样的问题:客户机的数据库名称或数据库用户帐户和开发平台上的不同,导致报表无法打开。虽然我们可以提前将水晶报表的数据源改为与客户端环境一致,但这样太过麻烦。如果有上百张报表的话,就算仅有10个客户,也会浪费大量的时间。其实,我们在设计和部署时可以不必关注水晶报表的数据源,而是在程序运行时通过代码来动态设置其数据源,以简化水晶报表的部署过程。
首先我们需要建立一个窗体,用于加载报表。在窗体上添加crystalReportViewer控件,用于承载报表,在此例中将其命名为crvReporter。
然后在需要加载报表的代码段写入如下代码(此例中写在了Form_Load事件中,也就是窗体一打开就开始加载报表): 这样一段代码就实现了将应用程序文件夹中的Reports子文件夹中的报表ReportA加载并显示于Form窗体中的功能。在这里,我们并不关心ReprotA的数据源如何设定,而是通过CrystalDecisions.Shared.TableLogOnInfo对象新建了一个数据源信息,并用其更新了ReportA的数据源。这样即使ReportA设定的数据源与客户端环境不同,也不会有影响了。
在信息连接参数处,我们用了如下代码,分别指定了服务器名称和数据库名称: 在实际环境中,我们应该将服务器名称和数据库名称存入配置文件中,然后在运行时读取并赋值给连接参数。这样在变更客户端环境时,我们仅需要更改配置文件,就可以保证水晶报表能够得到正确的数据源而不用重新进行编译。
在登陆方式中,我们使用了集成身份验证,代码如下:当数据库已经为我们的当前登陆账号赋予了访问权限时,我们就可以使用此种方式通过数据库验证。这样的好处是避免了在配置文件中存储用户密码导致的安全性问题。
如果不想使用集成身份验证而要使用数据库用户帐号登陆,那么可以使用如下代码: UserId指定了数据库用户名称,Password指定了用户密码。在实际环境中,也应该存储在配置文件里。
至此我们就实现了水晶报表在不同客户端的简单加载。
作者:行一山人
出处:http://www.cnblogs.com/benbenkoala/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。