-2

我到处看了看,进行了大量研究,测试了许多不同的人的代码,但在尝试打开向报告发送两个参数的水晶报告时仍然遇到同样的问题。

每次打开它都会打开空白。我在查看器上点击刷新,它会询问参数并打开就好了。

我的代码在下面列出。我在最后期限。如果有人能看到这个并帮助我,我将不胜感激。经过数小时的研究,我迷失了方向。

        ReportDocument cryRpt = new ReportDocument();
        cryRpt.Load(@"C:\reports\myReport.rpt");
        cryRpt.SetDatabaseLogon("", "", "MyServer", "MyDB");
        ConnectionInfo c = new ConnectionInfo();
        c.ServerName = "MyServer";
        c.IntegratedSecurity = true;
        c.DatabaseName = "MyDB";

        CrystalDecisions.CrystalReports.Engine.Tables CrTables = cryRpt.Database.Tables;

        foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
        {
            CrystalDecisions.Shared.TableLogOnInfo crtableLogoninfo = CrTable.LogOnInfo;
            crtableLogoninfo.ConnectionInfo = c;
            CrTable.ApplyLogOnInfo(crtableLogoninfo);
        }

        cryRpt.SetParameterValue("@parmBeginDate", "01-01-2010");
        cryRpt.SetParameterValue("@parmEndDate", "03-30-2013");
        crystalReportViewer1.ReportSource = cryRpt;
        crystalReportViewer1.Refresh();
        crystalReportViewer1.Show();
4

2 回答 2

2

如果您的报告有一个或多个子报告,就会发生这种情况。尝试重构将报告连接设置为方法。然后,您可以枚举子报表集合并为每个子报表设置连接信息。我也更喜欢直接设置ConnectionInfo对象。

foreach (ReportDocument subReport in report.Subreports)
{
    SetDatabaseConnectionInformation(subReport);
}

private void SetDatabaseConnectionInformation(ReportDocument report)
{
    ConnectionInfo connectionInfo = new ConnectionInfo();
    connectionInfo.AllowCustomConnection = true;
    connectionInfo.Type = ConnectionInfoType.SQL;
    connectionInfo.ServerName = MyServer;
    connectionInfo.IntegratedSecurity = (true or false);
    connectionInfo.UserID = MyUserName;
    connectionInfo.Password = MyPassword;
    foreach (Table table in report.Database.Tables)
    {
        TableLogOnInfo tableLogOnInfo = table.LogOnInfo;
        tableLogOnInfo.ConnectionInfo = connectionInfo;
        table.ApplyLogOnInfo(tableLogOnInfo);
    }
}

此外,如果您有多个数据源,则需要设置InternalConnectionInfo类来单独设置不同数据源的连接信息。

于 2013-04-01T16:45:11.777 回答
0

答案是在我将报告加载到 Crystalreportviewer 之后声明我的参数。然后刷新。之后效果很好。感谢您的帮助。

于 2013-04-01T18:34:08.950 回答