ページにドロップダウン、ラベル、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 を見たい場合はお知らせください。投稿します。