0

現在、レポートを 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);

    }
}

私は何を見逃した、または間違ったことをしましたか? パラメータが正しく適用されている (デバッガに正しい値が表示されている) のに、まだ実際には使用されていないのはなぜですか?

4

1 に答える 1