【06年博文搬家】水晶报表系列--水晶报表在不同客户端上的加载处理

    我们在开发平台上建立的水晶报表,在部署到客户机时,会面临这样的问题:客户机的数据库名称或数据库用户帐户和开发平台上的不同,导致报表无法打开。虽然我们可以提前将水晶报表的数据源改为与客户端环境一致,但这样太过麻烦。如果有上百张报表的话,就算仅有10个客户,也会浪费大量的时间。其实,我们在设计和部署时可以不必关注水晶报表的数据源,而是在程序运行时通过代码来动态设置其数据源,以简化水晶报表的部署过程。

    首先我们需要建立一个窗体,用于加载报表。在窗体上添加crystalReportViewer控件,用于承载报表,在此例中将其命名为crvReporter

然后在需要加载报表的代码段写入如下代码(此例中写在了Form_Load事件中,也就是窗体一打开就开始加载报表):    这样一段代码就实现了将应用程序文件夹中的Reports子文件夹中的报表ReportA加载并显示于Form窗体中的功能。在这里,我们并不关心ReprotA的数据源如何设定,而是通过CrystalDecisions.Shared.TableLogOnInfo对象新建了一个数据源信息,并用其更新了ReportA的数据源。这样即使ReportA设定的数据源与客户端环境不同,也不会有影响了。

Code

 

    在信息连接参数处,我们用了如下代码,分别指定了服务器名称和数据库名称:    在实际环境中,我们应该将服务器名称和数据库名称存入配置文件中,然后在运行时读取并赋值给连接参数。这样在变更客户端环境时,我们仅需要更改配置文件,就可以保证水晶报表能够得到正确的数据源而不用重新进行编译。

Code

 

    在登陆方式中,我们使用了集成身份验证,代码如下:当数据库已经为我们的当前登陆账号赋予了访问权限时,我们就可以使用此种方式通过数据库验证。这样的好处是避免了在配置文件中存储用户密码导致的安全性问题。

Code

    

    如果不想使用集成身份验证而要使用数据库用户帐号登陆,那么可以使用如下代码:    UserId指定了数据库用户名称,Password指定了用户密码。在实际环境中,也应该存储在配置文件里。

Code

 

 

    至此我们就实现了水晶报表在不同客户端的简单加载。

posted @ 2009-04-10 09:47  行一山人  阅读(236)  评论(0编辑  收藏  举报