我正在运行CR XI,并通过ASP.NET页面中的ReportViewer访问.RPT文件。Crystal Reports Reportviewer - 设置数据源动态不工作:argh:
我已经得到了下面的代码,它应该动态设置报表数据源。
rptSP = New ReportDocument Dim rptPath As String = Request.QueryString("report") rptSP.Load(rptPath.ToString, 0) Dim SConn As New System.Data.SqlClient.SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString) rptSP.DataSourceConnections(SConn.DataSource, SConn.InitialCatalog).SetConnection(SConn.DataSource, SConn.InitialCatalog, SConn.UserID, SConn.Password) Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo myConnectionInfo.ServerName = SConn.DataSource myConnectionInfo.DatabaseName = SConn.InitialCatalog myConnectionInfo.UserID = SConn.UserID myConnectionInfo.Password = SConn.Password
'Two new methods to loop through all objects and tables contained in the requested report and set
'login credentials for each object and table.
SetDBLogonForReport(myConnectionInfo, rptSP)
SetDBLogonForSubreports(myConnectionInfo, rptSP)
Me.CrystalReportViewer1.ReportSource = rptSP
但是当我去到每一个.RPT文件,并打开数据库专家部分,但显然仍servernames节点在那里硬编码,和上面列出的代码似乎并不能够更改硬编码的服务器名称。
我这样说是因为我有培训和生产环境。当.RPT文件使用我的生产服务器进行硬编码时,我使用上面的代码在训练服务器上打开它(并且web.config在连接字符串中具有训练服务器)时,我会得到以下代码:
未将对象引用设置为对象的实例。
然后,如果我进入.RPT文件,并将数据源更改为训练服务器,并尝试再次打开它,它会正常工作。为什么上面的代码不覆盖.RPT文件数据源?
如何避免在将报表从服务器迁移到服务器时必须打开每个.RPT并更改数据源? .RPT文件中是否存在我缺少或设置的设置?
我不确定你的建议。你也许有一些代码? – Albert 2010-03-31 20:04:27