在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