0

WebサイトでReportViewerコントロールを使用していますが、レポートに3つ以上のサブレポートが含まれています。多くの場合、サブレポートのデータはオプションのデータであるために存在しません。読者に知らせるために、適切にフォーマットされ、整列されたメッセージを出力する必要があります。私は次のコードを持っています:

    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プロパティは制限が多すぎます。

理想的には、エクスプレッションまたはコードを使用して、各サブレポートに行なしメッセージ自体を処理させたいと思います。ただし、Microsoftの作業方法の欠陥は、レポートが表示するデータがあることを条件としていることであるように思われます。

4

1 に答える 1

0

だから私は自分の問題に対する実行可能な解決策を見つけました。デフォルトのnorows関数を無視し、代わりにサブレポートで作業を行っています。

詳細が記載されたTablixがあります。次に、行がないというメッセージを含む追加のテキストボックスを作成します。行なしのメッセージは、次のようなデータセットに応じて非表示になります。

=iif(Sum(Fields!ActID.Value, "DSSub") > 0, true, false)
于 2013-03-11T10:36:28.863 に答える