我正在運行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