我有一个带有动态参数的 Crystal Reports 2008 报告(例如,引用列的分发点DP.distributionPoint
)。在我的应用程序 (C#) 中打开报告时,我在运行时设置数据源,报告正确打开Enter Parameter Values
,报告窗口显示分发点 ( DP.distributionPoint
) 的可用值。
我用来动态设置数据源的代码(请注意,此报告没有子报告,但报告是指数据库中的数据库表和视图)
SetDataSource(ReportDocument report, string serverName, string databaseName)
{
// Set the connection for the main report.
report.DataSourceConnections[0].SetConnection(serverName, databaseName, true);
TableLogOnInfo tableLogonInfo = new TableLogOnInfo();
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.DatabaseName = databaseName;
connectionInfo.ServerName = serverName;
connectionInfo.IntegratedSecurity = true;
foreach (Table table in report.Database.Tables)
{
tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
table.Location = tableLogonInfo.ConnectionInfo.DatabaseName + ".dbo." +
table.Location.Substring(table.Location.LastIndexOf(".") + 1);
}
}
每次打开报表时都需要设置数据源。我的计划是在报表上设置数据源,并用位置信息保存报表,所以下次我不需要调用 set datasource。
但是,当我在没有 setdatasource 的情况下测试应用程序时,我可以打开报告,但“输入参数值”窗口中分发点的可用值现在没有显示。
笔记:
我已经检查了报告中所有表/视图的 table.LogOnInfo.ConnectionInfo.ServerName 和 table.LogOnInfo.ConnectionInfo.DatabaseName,它与我连接到的数据库相同。
如果我设置 set table.Location 我可以查看可用值列表。
问题:
- 为什么在没有 setdatasource 功能的情况下打开报表时未显示可用值列表?
- 是否可以在 Crystal Reports 2008 中以编程方式更改/控制 FieldParameter 的可用值?