2013-02-18 44 views
0

我在網站中使用ReportViewer控件,我的報告包含3個或更多子報告。子報表中的數據通常不存在,因爲它是可選數據。我需要輸出一個很好格式化和對齊的消息,讓讀者知道。我有以下代碼:如何在Microsoft rdlc子報告中沒有行時創建一條好消息?

protected void ReportViewer1_SubreportProcessing(object sender, SubreportProcessingEventArgs e) 
    { 
     DataTable dtReport = GetReportSub(reportId); 
     foreach (DataRow drRow in dtReport.Rows) 
     { 
      if (Replace(drRow["subName"].ToString(), " ", "") == e.ReportPath) 
      { 
       string sSQLMain = SQLReplacer(drRow["subSQL"].ToString()); 
       DataTable dtData = BuildCollectionArray(sSQLMain, new OdbcParameter()); 
       if (dtData.Rows.Count == 0) 
       { 
        //TODO: Hide the report and show a friendly message 
       } 
       else 
       { 
        ReportDataSource dataSource = new ReportDataSource("DS" + Replace(drRow["subName"].ToString(), " ", ""), dtData); 
        e.DataSources.Add(dataSource); 
       } 
       break; 
      } 
     } 
    } 

這將提取數據,並將其添加到需要它的報告。但是,如果沒有數據,則唯一的選項是NoRowsMessage屬性。但是,每個子報告的主報告中的NoRowsMessage屬性太有限制。

理想情況下,我希望每個子報告使用exporession或代碼來處理no rows消息本身。然而,微軟工作方式的缺陷似乎在於報告是以要顯示數據爲條件的。

回答

0

所以我找到了一個可行的解決方案來解決我的問題。我忽略了默認的無行函數,而是在子報表中進行工作。

我有一個Tablix與我的詳細信息,然後我將創建一個額外的文本框與我的無行消息。根據DataSet隱藏無行消息,例如:

=iif(Sum(Fields!ActID.Value, "DSSub") > 0, true, false)