10

サブレポートのパラメータを設定するにはどうすればよいですか? SubreportProcessing イベントへの接続に成功しました。e.ReportPath で正しいサブレポートを見つけ、e.DataSources.Add でデータソースを追加できます。しかし、レポート パラメータを追加する方法が見つかりませんか??

それらをマスターレポートに追加することを提案している人を見つけましたが、マスターレポートをサブレポートに接続する必要はまったくないため、実際にはそうしたくありません。サブレポート。

1 つのレポートをマスター テンプレートとして使用し、レポートの名前、ページ番号などを印刷しています。サブレポートはレポート自体になります。そして、サブレポートのこれらのレポート パラメータを設定する方法しか見つけられなかった場合、私はうまくいくでしょう...

明確化:パラメータの作成/定義は問題ではありません。問題は、それらの値を設定することです。SubreportProcessing イベントで行うのが自然だと思いました。SubreportProcessingEventArgs には、実際には Parameters プロパティがあります。しかし、それは読み取り専用です!では、それをどのように使用しますか?それらの値を設定するにはどうすればよいですか?

4

7 に答える 7

2

これは回答済みとしてマークされた古い質問であることは知っていますが、今日これを検索していたところ、過去数か月以内にコメントされていることがわかったので、フォローアップの回答を投げ込むと思いました.

メイン レポートの各レコードのコンテキストでサブレポートをレンダリングするには、 を宣言し、SubreportProcessingEventHandlerそのハンドラー内でサブレポートの各インスタンスの DataSet を発生時にロードする必要があります。SubreportProcessingEventArgsイベントが発生したときに親レポートから渡されるパラメーター コレクションがあります。

そのため、メイン レポートのフィールドにバインドされた同様の名前のパラメーターを使用してメイン レポートのサブレポート パラメーターを構成した場合、サブレポートがレンダリングされるときに値にアクセスできます。

これは、はるかに明確に説明する非常に優れた記事です。

于 2016-04-01T21:31:20.273 に答える
2

それは機能しますが、確かに厄介です。

まず、レポートを .rdl として作成することをお勧めします。この方法でレポートをテストする方がはるかに簡単です。また、サブレポートのパラメーターを設定して rdl としてテストし、サブレポートの各パラメーターが親レポートのパラメーターとしても定義されていることを確認することもできます。サブレポートを含むレポートを取得したら、.rdl の名前を rdlc に変更し、rdlc ファイルを ReportViewer プロジェクトに追加できます。これ以上の変更は必要ありません。コード内のデータ ソース名として rdl データソースの名前を使用して、SubreportProcessing イベント ハンドラーでレポートにデータを提供します。

渡されたパラメーターに値を割り当てません。サブレポートはそれらをそのまま使用します。(欠落しているステップは、上記のように親レポートとサブレポートにパラメーターを追加しているようです。)パラメーターを評価し、それらをクエリパラメーターとして使用して、追加するデータソースを取得できます。サブレポートの未発見のディメンションにあるようなデータソースについて考える必要があります。イベント ハンドラーでデバッグしている間、私の言いたいことを確認する必要があります。アプリケーションの値の中にはすぐに使用できるものもあれば、他の場所で簡単に使用できるものもあり、object not found 例外がスローされます。たとえば、アプリケーションのメイン フォームで作成したクラスのインスタンスにデータセットを作成します。アプリケーション全体でデータセットを使用します。SubreportProcessing イベント ハンドラーでは、共通のデータセットを使用できません。そのため、レポートに必要なテーブルの新しいインスタンスを作成して入力する必要があります。メイン レポートでは、共通のデータセットにアクセスできます。このような他の制限があります。ただ通り抜ける必要があります。

以下は、動作中の VB.NET ReportViewer アプリケーションの SubreportProcessing イベント ハンドラーです。サブレポートのデータソースを取得するいくつかの異なる方法を示します。subreport1 はアプリケーション ビジネス オブジェクトから 1 行のデータ テーブルを構築し、subreport2 はレポートが必要とするデータをパラメーターなしで提供します。subreport3 は subreport2 と同じですが、ReportDataSource を作成するクエリで必要な日付値で使用するためにサブレポートに渡されたパラメーターの 1 つを評価します。

    Public Sub SubreportProcessingEventHandler(ByVal sender As Object, _
                                               ByVal e As SubreportProcessingEventArgs)
    Select Case e.ReportPath
        Case "subreport1"
            Dim tbl As DataTable = New DataTable("TableName")
            Dim Status As DataColumn = New DataColumn
            Status.DataType = System.Type.GetType("System.String")
            Status.ColumnName = "Status"
            tbl.Columns.Add(Status)
            Dim Account As DataColumn = New DataColumn
            Account.DataType = System.Type.GetType("System.String")
            Account.ColumnName = "Account"
            tbl.Columns.Add(Account)
            Dim rw As DataRow = tbl.NewRow()
            rw("Status") = core.GetStatus
            rw("Account") = core.Account
            tbl.Rows.Add(rw)
            e.DataSources.Add(New ReportDataSource("ReportDatasourceName", tbl))
        Case "subreport2"
            core.DAL.cnStr = My.Settings.cnStr
            core.DAL.LoadSchedule()
            e.DataSources.Add(New ReportDataSource("ScheduledTasks", _
                                                   My.Forms.Mother.DAL.dsSQLCfg.tSchedule))
        Case "subreport3"
            core.DAL.cnStr = My.Settings.cnStr
            Dim dt As DataTable = core.DAL.GetNodesForDateRange(DateAdd("d", _
                                                                          -1 * CInt(e.Parameters("NumberOfDays").Values(0)), _
                                                                          Today), _
                                                                  Now)
            e.DataSources.Add(New ReportDataSource("Summary", dt))
    End Select
End Sub
于 2009-01-25T02:32:30.010 に答える
1

データベースのパスの先頭に Properties.Settings.... 値を渡す必要があるという点で、同様の問題がありました。これを行うには、メイン レポートでプロパティを設定し、そのプロパティを使用してサブレポートで 2 番目のプロパティを設定する必要がありました。メイン プロパティを設定すると、サブレポート プロパティが設定されます。次のようにコードでメイン プロパティを設定できます。

ReportViewer の名前が rv だとすると、次のようにコーディングします。

var rp = new ReportParameter("MainReportParamName", Properties.Settings....);
rv.LocalReport.SetParameters(new ReportParameters[] { rp });
于 2010-05-17T01:26:40.667 に答える
0

xml 定義を介してそれらを追加できます。xml を使用して、選択したサブレポートやその他のオプションに基づいてレポート全体を作成します。これを可能な解決策として見たい場合は、月曜日にここにコードを貼り付けることができます。

編集: レポートを展開する前に、XML でサブレポートに値を設定できます。これはあまり柔軟ではなく、これらの値を要求する場合は、親レポートで必要になる可能性が高いと想定しています。

XML がどのように表示されるかを確認するには、サブレポートを追加し、サブレポートのプロパティ > パラメータに値を入力してから、コードを表示します。

<Subreport Name="subreport1">
    <Parameters>
      <Parameter Name="StartDate">
        <Value>=Parameters!StartDate.Value</Value>
      </Parameter>
      <Parameter Name="EndDate">
        <Value>1/1/2009</Value>
      </Parameter>

=Parameters!StartDate.Value を使用する代わりに、EndDate のように実際の値を設定したいと思います。

于 2009-01-20T02:55:40.933 に答える