我有一个 C# windows 应用程序,其中有许多 Crystal 报表。我使用以下代码调用并显示它们:
rptDDCollection rpt = new rptDDCollection();
rpt.SetDatabaseLogon(Connect.sDatabaseUserName, DLL.Connect.sDatabasePassword, "", Connect.sCurrentDatabase);
rpt.RecordSelectionFormula = "";
frmReports frm = new frmReports();
frm.crViewer1.DisplayGroupTree = false;
frm.crViewer1.ReportSource = rpt;
frm.crViewer1.SelectionFormula = rpt.RecordSelectionFormula;
frm.crViewer1.Show();
frm.Show();
现在,问题是我有 2 个数据库要处理。一个数据库可以正常工作。我必须使用相同的报告,但我经常需要从另一个数据库查看数据。数据库引擎是 SQL 服务器.在网上搜索和堆栈溢出时,我发现了通过代码动态设置数据库名称的建议。在这种情况下应该怎么做才能实现我想要的?
最佳答案
我通过为报告中的表设置数据库名称来解决这个问题。我在上面的实际代码中做了一个更改。我创建了一个名为 ApplyLogonInfo 的方法并将报告对象传递给它。在方法中我编写了代码动态设置报告表的数据库名称。这是修改后的代码:
rptDDCollection rpt = new rptDDCollection();
rpt.SetDatabaseLogon(Connect.sDatabaseUserName, DLL.Connect.sDatabasePassword, "", Connect.sCurrentDatabase);
ApplyLogOnInfo(rpt);
rpt.RecordSelectionFormula = "";
frmReports frm = new frmReports();
frm.crViewer1.DisplayGroupTree = false;
frm.crViewer1.ReportSource = rpt;
frm.crViewer1.SelectionFormula = rpt.RecordSelectionFormula;
frm.crViewer1.Show();
frm.Show();
下面是新创建的方法:
public static void ApplyLogOnInfo(ReportClass rpt)
{
TableLogOnInfo info = new TableLogOnInfo();
info.ConnectionInfo.DatabaseName = Connect.sCurrentDatabase;
for (int i = 0; i < rpt.Database.Tables.Count; i++)
{
rpt.Database.Tables[i].ApplyLogOnInfo(info);
}
}
sCurrentDatabase 是当前选择查看的数据库的名称。
这使我能够动态设置数据库名称,现在我可以使用 2 个(或通常是多个)数据库并查看我希望查看的任何数据库中的数据。
关于c# - 如何使用 C# 为 Crystal 报表动态设置数据库名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483872/