我正在处理现有报告,我想用数据库对其进行测试。问题是在初始报告创建期间设置的目录不再存在。我只需要将目录参数更改为新的数据库。该报告使用存储的proc来处理其数据。它看起来像是如果尝试删除proc以重新添加它,报告中的所有字段将消失,我将不得不重新开始。在VS 2005中更改Crystal Report的目录属性
我在Studio的设计师工作,只需要调整目录属性来获得预览。我的代码正在努力从程序中正确处理事情。
我正在处理现有报告,我想用数据库对其进行测试。问题是在初始报告创建期间设置的目录不再存在。我只需要将目录参数更改为新的数据库。该报告使用存储的proc来处理其数据。它看起来像是如果尝试删除proc以重新添加它,报告中的所有字段将消失,我将不得不重新开始。在VS 2005中更改Crystal Report的目录属性
我在Studio的设计师工作,只需要调整目录属性来获得预览。我的代码正在努力从程序中正确处理事情。
编辑:看到你的编辑,所以我会保留我原来的帖子,但不得不说。我从来没有在VS设计模式的水晶报告,所以我不能在那里很多帮助抱歉。
report.SetDatabaseLogon(UserID, Password, ServerName, DatabaseName);
之后,你必须通过报表中所有引用的表推出,并通过子报表递归及其logoninfo复位到一个基于报告connectioninfo。
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