Visual studio 在VS 2005中更改Crystal报表的Catalog属性
我正在处理一个现有的报告,我想用数据库测试它。问题在于,初始报告创建期间的目录集不再存在。我只需要将catalog参数更改为一个新数据库。报表正在使用存储的过程作为其数据。看起来,如果尝试删除进程以重新添加它,报告上的所有字段都将消失,我将不得不重新开始Visual studio 在VS 2005中更改Crystal报表的Catalog属性,visual-studio,crystal-reports,Visual Studio,Crystal Reports,我正在处理一个现有的报告,我想用数据库测试它。问题在于,初始报告创建期间的目录集不再存在。我只需要将catalog参数更改为一个新数据库。报表正在使用存储的过程作为其数据。看起来,如果尝试删除进程以重新添加它,报告上的所有字段都将消失,我将不得不重新开始 我在Studio中的designer中工作,只需要调整catalog属性以获得预览。我有代码可以正确处理程序中的内容。编辑:看到了您的编辑,所以我会保留我的原始帖子,但不得不说。。我从来没有在VS设计模式下的水晶报告,所以我在那里帮不了什么忙。
我在Studio中的designer中工作,只需要调整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