-2

私はあらゆる場所を調べ、多くの調査を行い、さまざまな人々のコードをテストしましたが、レポートに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

これは、レポートに 1 つ以上のサブレポートがある場合に発生します。メソッドへのレポート接続の設定をリファクタリングしてみてください。その後、サブレポート コレクションを列挙し、各サブレポートの接続情報を設定できます。また、 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 に答える