Visual studio 在VS 2005中更改Crystal报表的Catalog属性

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

我正在处理一个现有的报告,我想用数据库测试它。问题在于,初始报告创建期间的目录集不再存在。我只需要将catalog参数更改为一个新数据库。报表正在使用存储的过程作为其数据。看起来,如果尝试删除进程以重新添加它,报告上的所有字段都将消失,我将不得不重新开始


我在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