サブレポートの使用
マルチデータソース対応に加えて、RDLレポートではサブレポートを使用できます。サブレポートとは、別のレポート内に挿入されているレポートのことです。例えば、プロジェクトに2つのレポート(メインレポートおよびサブレポート)を追加し、メインレポート上にSubReportコントロールを配置することで、そこにサブレポートを表示できます。
サブレポートを使用する場合、メインレポート上に直接配置する場合も考えられますが、実際のケースでは、メインレポートのデータ領域の中にサブレポートを配置する方法が多いと思われます。なお、メインレポートとサブレポートのデータ連結には、パラメータを使用します。
ここでは、サブレポートを使ったサンプルとして、見積書を作成します。データソースには、製品付属のSeikyu2.mdbデータベースを使用します。
付属のサンプルは、「03_サブレポートの使用_Main.rdlx」および、「03_サブレポートの使用_Sub.rdlx」をご参照ください。
データセットの作成
メインレポートのデータセットとして、見積IDと顧客名をグループ化したデータを取得します。
SELECT Estimate.EstimateID, Customers.CompanyName FROM Estimate INNER JOIN Customers ON Estimate.CustomerID = Customers.CustomerID GROUP BY Estimate.EstimateID,Customers.CompanyName
サブレポートのデータセットとして、品名と個数の詳細データを取得します。
SELECT Estimate.EstimateID, Products.ProductName, Estimate.Quantity FROM Estimate INNER JOIN Products ON Estimate.ProductID = Products.ProductID
レイアウトの作成
メインレポートにTableデータ領域を配置し、Tableデータ領域内に、顧客名を表示するTextBoxレポートアイテムおよびSubReportレポートアイテムを配置します。
サブレポートにTableデータ領域を配置し、品名および個数を表示するTextBoxレポートアイテムを配置します。
サブレポートの指定
レポートデザインが完成したら、メインレポートとサブレポートを関連付けます。メインレポートに配置したSubReportコントロールのReportNameプロパティにサブレポート名を設定します。
さて、この状態で試しにレポートをプレビューしてみると、本来ならば顧客ごとの注文内容を表示したいのですが、すべての顧客の注文内容が表示されてしまいます。
パラメータの追加
顧客ごとの注文内容を表示するためには、パラメータを使用してデータを抽出します。
サブレポートを開き、レポートエクスプローラからパラメータを追加します。パラメータの名前は、デフォルトの「ReportParameter1」でかまいません。次に、サブレポートのデータセットのダイアログで「パラメータ」ページを開いて、パラメータを追加します。パラメータの値には、先ほどレポートに追加した「ReportParameter1」を設定します。
次に、パラメータとデータセットに結びつけるために、SQLクエリを修正します。データセットのEstimateIDが特定の値の時だけのデータ行を抽出するよう、クエリの最後に「WHERE EstimateID = ?」と追加します。
SELECT Estimate.EstimateID, Products.ProductName, Estimate.Quantity FROM Estimate INNER JOIN Products ON Estimate.ProductID = Products.ProductID WHERE EstimateID = ?
備考
ここでは、データソースの種類がOleDBのため、クエリ中のパラメータ表現として「?」を使っています。記述方法はデータソースの種類で異なります。詳細については、製品ヘルプの[パラメータ]をご参照ください。
最後に、メインレポートに配置したSubReportコントロールの「Parameters」プロパティを開き、パラメータを追加します。「パラメータ名」には先ほどサブレポートに追加した「ReportParameter1」、「パラメータ値」には渡したいフィールドを指定します。
以上のパラメータの設定により、顧客ごとの注文内容が表示されるようになります。