現在、レポートを CrystalrReports から SSRS に移行しようとしています。私は報告に非常に慣れておらず、以前にこれらの報告システムの 8 つを使用したことがありません。
1 つのメイン レポートと 2 つのサブレポートがあります。それらは正しく機能しており、目的のデータを表示しています。AllFields-Parameter と SelectedId-Parameter の 2 つのパラメーターがあります。
AllFields は、データ行ごとに空のフィールドを除外する必要があるかどうかを示します。SelectedId は、ビューアで選択されたデータ行を示すため、レポートはその特定のデータのみに関するものになります。
コードをデバッグすると、正しいパラメーターが適用されます。私が何を選択しても、彼がまだすべてのデータを処理している理由がまったくわかりません。
これは、レポートの下にある c# コードです。
public HauptformularReportForm(DataTable themen, GespraechprotokollDAO gespraechprotokollDao, GrundlagendokumenteDAO grundlagendokumenteDao, bool onlyFilledFiels, int themaId)
: this()
{
themaDS = new ReportDataSource("DataSet1", themen);
// fill themen to display
bewertungDS = ComputeAndFillBewertungs(themen);
// display all fields = also empty ones
ReportParameter rp = new ReportParameter("AllFields", (!onlyFilledFiels).ToString());
// -1 means all themen
tid = new ReportParameter("SelectedId", themaId.ToString());
parameterList = new List<ReportParameter>();
parameterList.Add(rp);
parameterList.Add(tid);
this.crystalReportViewer.LocalReport.SetParameters(parameterList);
this.crystalReportViewer.LocalReport.DataSources.Clear();
this.crystalReportViewer.LocalReport.DataSources.Add(themaDS);
this.crystalReportViewer.LocalReport.DataSources.Add(bewertungDS);
this.crystalReportViewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubDataSource);
//this.crystalReportViewer.LocalReport.Refresh();
this.crystalReportViewer.RefreshReport();
}
public void SetSubDataSource(object sender, SubreportProcessingEventArgs e)
{
// display all fields = also empty ones
e.DataSources.Add(themaDS);
e.DataSources.Add(bewertungDS);
}
/// <summary>
/// The report will only display the given thema
/// </summary>
/// <param name="themaId"></param>
public void DisplaySingleThema(int themaId)
{
tid.Values.Clear();
tid.Values.Add(themaId.ToString());
parameterList.Add(tid);
}
/// <summary>
/// Compute the average Bewertungs for all given themen,
/// fill a DataTable with the computed averages and use is as datasource in the report.
/// </summary>
/// <param name="themen"></param>
private ReportDataSource ComputeAndFillBewertungs(DataTable themen)
{
HauptformularReportDataSet.BewertungDataTable bewertungDataTable = new HauptformularReportDataSet.BewertungDataTable();
// get bewertungs of all themen
Dictionary<int, IList<IFrageWithBewertung>> dictionary = BewertungsExtractor.Extract(themen);
// fill table with thema_id and computed bewertung
foreach (KeyValuePair<int, IList<IFrageWithBewertung>> themaBewertung in dictionary)
{
HauptformularReportDataSet.BewertungRow row = bewertungDataTable.NewBewertungRow();
row.THEMA_ID = themaBewertung.Key;
row.BewertungOfAllFragen = BewertungAverageComputer.ComputeAverage(themaBewertung.Value);
row.BewertungOfFragenWithStatus = BewertungAverageComputer.ComputeAverage(themaBewertung.Value, true);
bewertungDataTable.AddBewertungRow(row);
}
// set datasource in report
report.Database.Tables["Bewertung"].SetDataSource(bewertungDataTable as DataTable);
return new ReportDataSource("DataSet2", bewertungDataTable as DataTable);
}
}
私は何を見逃した、または間違ったことをしましたか? パラメータが正しく適用されている (デバッガに正しい値が表示されている) のに、まだ実際には使用されていないのはなぜですか?