私はそのようなオブジェクト構造を持っています
注文 -> List:OrderItems(製品) -> List:AdditionalProducts(製品)
サブレポートとサブサブレポートを含むメイン レポートがあります。
これを次の方法で修正しました
サブレポートでは、サブサブ レポートにパラメーターを渡します。このパラメータには製品名の値があり、「thisproduct」と呼ばれます。
subreportprocessing 関数は、サブレポートとサブサブ レポートの両方から呼び出されます。したがって、ここで両方のデータ ソースを割り当てる必要があります。
サブレポート (order.items) のデータ ソースを割り当てます。
サブサブレポート (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));
}
}
}
}