2008-09-24 52 views
1

我正在处理现有报告,我想用数据库对其进行测试。问题是在初始报告创建期间设置的目录不再存在。我只需要将目录参数更改为新的数据库。该报告使用存储的proc来处理其数据。它看起来像是如果尝试删除proc以重新添加它,报告中的所有字段将消失,我将不得不重新开始。在VS 2005中更改Crystal Report的目录属性

我在Studio的设计师工作,只需要调整目录属性来获得预览。我的代码正在努力从程序中正确处理事情。

回答

0

编辑:看到你的编辑,所以我会保留我原来的帖子,但不得不说。我从来没有在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)); 
      } 
     } 
    } 
2

如果你只是需要做的是在设计,然后右键点击一些空白,并单击数据库 - >设置数据源位置。从那里你可以使用当前的连接或添加一个新的连接。使用新目录设置新连接。然后点击顶部的当前连接并点击更新。你的数据源将会改变。但是如果你需要在运行时做到这一点,那么下面的代码是最好的方式。

#'SET REPORT CONNECTION INFO 
     For i = 0 To rsource.ReportDocument.DataSourceConnections.Count - 1 
      rsource.ReportDocument.DataSourceConnections(i).SetConnection(crystalServer, crystalDB, crystalUser, crystalPassword) 
     Next