您的位置:首页 > 数据库

取消水晶报表的数据库登录框 分享

2010-06-07 08:33 288 查看
这两天在和斌做后台中的报表,暂定使用水晶报表,目前还只是处于对水晶报表的初级应用阶段,也就是知道如何 汇个总、写个函数、传个参数。

问题总是层出不穷,在最后整合报表,进行报表显示测试的时候,发现每次更新数据显示(除第一次)时都会蹦出一个“登录数据库的信息提示界面”很是苦闷,并且这肯定不是我们需要的,还是需要花大力气搞定的。

于是参考了某斑竹写的一篇 “取消水晶报表的数据库登陆框”博文。颇有感触,于是进行了消化吸收,整合代码如下。

主要是,针对水晶报表对每数据库登录(DbLogOn)提供一次数据库链接信息。

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Reflection
Imports System.Configuration
Imports CrystalDecisions.Web

Public Class ReportConfig

''' <summary>
''' 提供web报表链接数据库所需要的信息,无参数,有返回值。
''' </summary>
''' <returns>返回链接信息的属性,其中有servername、database、userid、pwd</returns>
''' <remarks></remarks>
Public Function readConfig() As TableLogOnInfo

Dim strServerName As String
Dim strDataBase As String
Dim strUserId As String
Dim strPwd As String
Dim logoninfo As New TableLogOnInfo

'从web.config配置文件中读取信息.
strServerName = System.Configuration.ConfigurationManager.AppSettings("servername")
strDataBase = System.Configuration.ConfigurationManager.AppSettings("database")
strUserId = System.Configuration.ConfigurationManager.AppSettings("userid")
strPwd = System.Configuration.ConfigurationManager.AppSettings("pwd")

logoninfo.ConnectionInfo.ServerName = strServerName
logoninfo.ConnectionInfo.DatabaseName = strDataBase
logoninfo.ConnectionInfo.UserID = strUserId
logoninfo.ConnectionInfo.Password = strPwd

'信息封装成logoninfo.
Return logoninfo

End Function

''' <summary>
''' 设置报表查看器不再显示登录数据库提示
''' </summary>
''' <param name="crv">当前报表查看器id</param>
''' <param name="coninfo">报表链接到数据库所需信息</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function SetDbLoginForReport(ByVal crv As CrystalReportViewer, ByVal coninfo As ConnectionInfo) As String
'tablelogoninfos 就是包括每个表中的logoninfo对象
Dim tablelogoninfos As TableLogOnInfos = crv.LogOnInfo
Dim logoninfo As New TableLogOnInfo
For Each logoninfo In tablelogoninfos
'绑定每一个logoninfo对象的数据库链接信息,这样可以不再显示数据库登录提示信息。
logoninfo.ConnectionInfo = coninfo
Next
Return Nothing

End Function
End Class


其中一个报表:

'省略....

Dim SelectByDate As New CollectMgr
Dim dt As New DataTable
Dim doc As New ReportDocument
Dim coninfo As New TableLogOnInfo
Dim reportconfig As New ReportConfig

'省略....

'获得报表链接数据库所需的所有参数信息
coninfo = reportconfig.readConfig

Try
'加载报表样表
doc.Load(Server.MapPath("./Cashier.rpt"))
'返回数据源
If txtStartTime.Value = txtEndTime.Value Then
dt = SelectByDate.FoodCollect(txtStartTime.Value)
Else
dt = SelectByDate.FoodCollect(txtStartTime.Value, txtEndTime.Value)
End If
doc.SetDataSource(dt)

crvCashierReport.ReportSource = doc

'防止出现提示登录数据库的情况
reportconfig.SetDbLoginForReport(crvCashierReport, coninfo.ConnectionInfo)

'结束


配置文件:

<appSettings>
<add key="servername" value="****" />
<add key="database" value="***" />
<add key="userid" value="**" />
<add key="pwd" value="***" />
</appSettings>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: