2016-04-19 6 views
0

現在CrystalrReportsからSSRSにレポートを移行しようとしています。 Imは非常に新しく報告され、haventは以前の報告システムのうちのひとつと協力していました。Reportmigration:CrystalReportsからSSRSへパラメータは適用されますが使用されません

私は1つのメインレポートと、2つのサブレポートを持っています。彼らは正しく働いており、望ましいデータを示しています。 AllFields-ParameterとSelectedId-Parameterの2つのパラメータがあります。

AllFieldsは、datarowごとに空のフィールドを残す必要があるかどうかを示します。 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); 

    } 
} 

?私のパラメータが正しく適用されるのはなぜですか(私はデバッガで正しい値を参照します)。

答えて

0

大丈夫ですが、上の例のサブレポートに間違ったデータソースを与えるだけでなく、コードはほとんど正しいです。

私はフィルタについて知りませんでした。彼らは私の問題を尋ねたときにも言及しませんでした。とにかく今は動作しているので、レポート/サブレポートごとにフィルタリングする必要があります。

関連する問題