2016-04-19 9 views
0

Ich versuche derzeit, einen Bericht von CrystalRReports nach SSRS zu migrieren. Ich bin sehr neu in der Berichterstattung und habe noch nie mit einem dieser Berichtssysteme gearbeitet.Reportmigration: CrystalReports in SSRS Parameter wird angewendet, aber nicht verwendet

Ich habe einen Hauptbericht mit 2 Unterberichten. Sie arbeiten korrekt und zeigen die gewünschten Daten an. Es gibt 2 Parameter, den AllFields-Parameter und den SelectedId-Parameter.

AllFields gibt an, ob leere Felder pro Datarow ausgelassen werden sollen. SelectedId gibt an, welcher Datarow im Viewer ausgewählt wurde, sodass der Bericht nur über diese spezifischen Daten erfolgen kann.

Wenn ich meinen Code debuggen, werden die richtigen Parameter angewendet. Ich habe überhaupt keine Ahnung, warum er immer noch alle Daten verarbeitet, egal was ich wähle.

Dies ist der C# -Code unter dem Bericht:

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); 

    } 
} 

Was habe ich verpasst oder falsch gemacht? Warum wird mein Parameter korrekt angewendet (ich sehe den richtigen Wert im Debugger), aber er wird trotzdem nicht wirklich benutzt?

Antwort

0

In Ordnung, der Code ist größtenteils korrekt, abgesehen davon, dass ich den Unterberichten im oberen Beispiel falsche Datenquellen gebe.

ich wusste nicht über Filter und sie wurden nicht einmal erwähnt, wenn ich mein Problem googled. Wie auch immer es jetzt funktioniert, Zeug muss nach Bericht/Unterbericht gefiltert werden.

Verwandte Themen