1

rdlc レポートを使用して、いくつかのビジネス オブジェクトを報告しています。サブレポートを使用して、ネストされたオブジェクトを報告します (ここで説明されているように)。

IList(Of Books) のような子オブジェクトの通常のリストを使用する場合、書籍のデータ ソースを作成し、これをサブレポートのデータ ソースとして使用します。

ネストされたオブジェクトが IList(Of String) またはプリミティブ型の別のリストである場合に、この手法をどのように使用するかについて、私は少し固執しています。

このシナリオで報告を行う最善の方法は何ですか?

4

2 に答える 2

0

私はそのようなオブジェクト構造を持っています

注文 -> List:OrderItems(製品) -> List:AdditionalProducts(製品)

サブレポートとサブサブレポートを含むメイン レポートがあります。

これを次の方法で修正しました

サブレポートでは、サブサブ レポートにパラメーターを渡します。このパラメータには製品名の値があり、「thisproduct」と呼ばれます。

subreportprocessing 関数は、サブレポートとサブサブ レポートの両方から呼び出されます。したがって、ここで両方のデータ ソースを割り当てる必要があります。

  1. サブレポート (order.items) のデータ ソースを割り当てます。

  2. サブサブレポート (InternalOrderItemAdditionalProducts) がこの関数を呼び出しているかどうかの「if」を追加します。ここでパラメータをチェックして、製品名を取得します。次に、orderitems をループして、見ている製品に関連するものを見つけ、subsubreport データソースをその製品に関連する追加の製品に割り当てます。

     private void SubreportProcessing(object sender, SubreportProcessingEventArgs e)
      {     
      // assign subreport datasource
      e.DataSources.Add(new ReportDataSource("OrderItems", order.Items));
    
      // if the subsubreport is calling this then
      if (e.ReportPath != null)
          if (e.ReportPath == "InternalOrderItemAdditionalProducts")
          {
              // find the orderitem relating to this product
              foreach (var orderitem in order.Items)
              {
                  if (e.Parameters["thisproduct"].Values[0] == orderitem.ProductType.Name)
                  {
                      // assign the subsubreport datasource to be the additional products of that order item
                      e.DataSources.Add(new ReportDataSource("AdditionalProducts",
                                                             orderitem.Product.AllDescendentAdditionalProducts));
                  }
              }
          }
    

    }

于 2010-06-29T08:03:21.530 に答える