在VS 2005中更改Crystal报表的目录属性
时间:2020-03-06 14:40:04 来源:igfitidea点击:
我正在处理一个现有的报告,我想用数据库对其进行测试。问题是在初始报告创建过程中设置的目录不再存在。我只需要将catalog参数更改为新数据库。该报告正在使用存储的proc作为其数据。看起来,如果尝试删除proc以重新添加它,则报告中的所有字段都将消失,我将不得不重新开始。
我正在Studio的设计器中工作,只需要调整catalog属性以获取预览。我有一些代码可以正常处理程序中的代码。
解决方案
编辑:看到了编辑,所以我会保留我的原始帖子,但是不得不说..我从来没有在VS中的设计模式下获得过准确的报告,所以我对此无能为力。
report.SetDatabaseLogon(UserID, Password, ServerName, DatabaseName);
之后,我们必须浏览报表中所有引用的表,然后遍历子报表,然后根据报表connectioninfo将其logoninfo重置为一个。
private void FixDatabase(ReportDocument report) { ConnectionInfo crystalConnectionInfo = someConnectionInfo; foreach (Table table in report.Database.Tables) { TableLogOnInfo logOnInfo = table.LogOnInfo; if (logOnInfo != null) { logOnInfo.ConnectionInfo = crystalConnectionInfo; table.LogOnInfo.TableName = table.Name; table.LogOnInfo.ConnectionInfo.UserID = someConnectionInfo.UserID; table.LogOnInfo.ConnectionInfo.Password = someConnectionInfo.Password; table.LogOnInfo.ConnectionInfo.DatabaseName = someConnectionInfo.DatabaseName; table.LogOnInfo.ConnectionInfo.ServerName = someConnectionInfo.ServerName; table.ApplyLogOnInfo(table.LogOnInfo); table.Location = someConnectionInfo.DatabaseName + ".dbo." + table.Name; } } //call this method recursively for each subreport foreach (ReportObject reportObject in report.ReportDefinition.ReportObjects) { if (reportObject.Kind == ReportObjectKind.SubreportObject) { this.FixDatabase(report.OpenSubreport(((SubreportObject)reportObject).SubreportName)); } } }
如果只需要在设计器中执行此操作,则右键单击某些空格,然后单击"数据库"->"设置数据源位置"。从那里我们可以使用当前连接或者添加新连接。使用新目录设置新连接。然后单击顶部的当前连接,然后单击更新。数据源将更改。但是,如果我们需要在运行时执行此操作,则以下代码是最佳方法。
#'SET REPORT CONNECTION INFO For i = 0 To rsource.ReportDocument.DataSourceConnections.Count - 1 rsource.ReportDocument.DataSourceConnections(i).SetConnection(crystalServer, crystalDB, crystalUser, crystalPassword) Next