0

ページにドロップダウン、ラベル、CR Viewer があります。DD からレポートを選択すると、ラベルが更新されて現在選択されているレポートが表示され、CRV が更新されてレポートが表示されます。

ラベルは正常に更新され、他のコントロールが適切に更新されていることを確認するためのテストとしてラベルを配置しました。一方、CRV は常に 1 リクエスト遅れます。レポートを選択しましたが、表示されません。別のレポートを選択すると、以前に選択したレポートが表示されます。

以下に投稿されたコードは、ラベルを追加する前のものですが、それ以外は何も変更されていません。

using System;
using DataAccess;
using CrystalDecisions.CrystalReports.Engine;

namespace Reporting
{
    public partial class CRViewer : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;
            ReportDropDown.Items.Add("Select a report");

            var reports = Data.ExecutSql("select * from ngmasterdb..reports");
            while (reports.Read()) ReportDropDown.Items.Add(reports["Name"].ToString());
            reports.Close();
        }

        protected void ReportDropDown_SelectedIndexChanged(object sender, EventArgs e)
        {
            var reportInfo = Data.ExecutSql("select * from ngmasterdb..reports where Name = '" + ReportDropDown.SelectedValue.Replace("'", "''") + "'");

            try
            {
                ReportDocument rptdoc = new ReportDocument();

                if (!reportInfo.Read()) return;
                var file = reportInfo["ReportFile"].ToString();
                if (file == null || file.Trim() == "") return;

                ReportSource.Report.FileName = file;
                CrystalReportViewer1.RefreshReport();
            }
            finally
            {
                reportInfo.Close();
            }
        }
    }
}

aspx で興味深いのは、DropDown コントロールの AutoPostBack が true に設定されていることだけだと思います。まだ aspx を見たい場合はお知らせください。投稿します。

4

1 に答える 1

0

もともと私は基本的にこれをやっていた:

ReportSource.Report.FileName = rptFileName;
CrystalReportViewer1.ReportSource = ReportSource;

ReportSource (CrystalDecisions.Web.CrystalReportSource オブジェクト) を取り除き、代わりにこれを実行したとき:

CrystalReportViewer1.ReportSource = rptFileName;

その後、正しく動作するようになりました。私は以前にこのアプローチを試したことがあります(または、少なくとも今はそうではないように見えますが、少なくとも私はやったと確信しています...)が、ファイルパスに関して何らかのエラーが発生していました。

これを試したときに以前に行ったエラーが発生した理由がわかりません。また、試していた方法を使用してもコントロールが正しく動作しない理由もまだわかりません。私を手がかりに。

于 2012-04-24T23:26:56.273 に答える