PowerTools ActiveReports for .NET 9.0J > ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > セクションレポートのチュートリアル > レイアウト > サブレポート - 実行時のデータソース |
セクションレポートでは、Subreportコントロールを使用し、複数の子レポートを含むことができます。子レポート(サブレポート)は、親セクション(Subreportコントロールが配置されたセクション)が出力されるたびに実行されます。このチュートリアルでは、親レポートのデータからサブレポートのレコードソースを変更して、現在の情報を取得する方法について説明します。
このトピックでは、以下のタスクを行います。
メモ: このチュートリアルではNorthwindデータベースを使用しています。Northwind.mdbデータベース(..ActiveReportsNET9\Data\ |
チュートリアルを完了すると、次のレポートが作成されます。
Visual Studioプロジェクトに親レポートとサブレポートを追加する
詳細は、「プロジェクトにレポートを追加する」参照してください。
親レポートをデータソースに接続する
SQLクエリ |
コードのコピー
|
---|---|
SELECT * FROM Categories |
親レポート(rptMain)のレイアウトを作成する
プロパティ名 | 値 |
---|---|
Name | lblProductsbyCategory |
Text | カテゴリ別の製品 |
Location | 0, 0 in |
Size | 5.75, 0.25 in |
Font Size | 14 |
Alignment | Center |
TextBox1
プロパティ名 | 値 |
---|---|
Name | txtCategoryID1 |
DataField | CategoryID |
Visible | False |
TextBox2
プロパティ名 | 値 |
---|---|
Name | txtCategoryName1 |
DataField | CategoryName |
Location | 1.15, 0.05 in |
Label1
プロパティ名 | 値 |
---|---|
Name | lblCategoryName |
Text | カテゴリ名: |
Location | 0, 0.05 in |
Size | 0.75, 0.2 in |
Font Bold | True |
Label2
プロパティ名 | 値 |
---|---|
Name | lblProducts |
Text | 製品: |
Location | 2.4, 0.05 in |
Font Bold | True |
Subreport
プロパティ名 | 値 |
---|---|
Name | SubReport1 |
Location | 3, 0.05 in |
Size | 2.25, 1 in |
子レポートの(rptSub)レイアウトを作成する
プロパティ名 | 値 |
---|---|
CanShrink | True |
BackColor | AliceBlue |
ヒント:レポートの最終的な出力結果に色を適用したくない場合であっても、サブレポートの背景に色を使用することで、レイアウト関連の問題を容易に見つけることができます。 |
プロパティ名 | 値 |
---|---|
DataField | ProductName |
Name | txtProductName |
Text | 製品名 |
Location | 0, 0 in |
Size | 2.25, 0.2 in |
サブレポートのインスタンスを作成するコードを追加する
注意: Formatイベントでサブレポートの新しいインスタンスを作成しないでください。Formatを実行するごとに新しいサブレポートが作成されるので、大量のメモリが消費されます。 |
Visual Basic
Visual Basicコード (ReportStartイベントの上に貼り付けます) |
コードのコピー
|
---|---|
Private rpt As rptSub Private childDataSource As New GrapeCity.ActiveReports.Data.OleDBDataSource() |
Visual Basicコード (ReportStartイベント内に貼り付けます) |
コードのコピー
|
---|---|
rpt = New rptSub() |
C#
サンプルコードを示します。
C#コード (ReportStartイベントの上に貼り付けます) |
コードのコピー
|
---|---|
private rptSub rpt; private GrapeCity.ActiveReports.Data.OleDBDataSource childDataSource = new GrapeCity.ActiveReports.Data.OleDBDataSource(); |
C#コード (ReportStartイベント内に貼り付けます) |
コードのコピー
|
---|---|
rpt = new rptSub(); |
子レポートにデータソースを割り当てるコードを追加する
Visual Basic
Visual Basicコード (Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
childDataSource.ConnectionString = CType(Me.DataSource, GrapeCity.ActiveReports.Data.OleDBDataSource).ConnectionString childDataSource.SQL = "SELECT * FROM Products WHERE CategoryID = " + Me.txtCategoryID1.Value.ToString rpt.DataSource = childDataSource SubReport1.Report = rpt |
C#
C#コード (Formatイベント内に貼り付けます) |
コードのコピー
|
---|---|
childDataSource.ConnectionString = ((GrapeCity.ActiveReports.Data.OleDBDataSource)this.DataSource).ConnectionString; childDataSource.SQL = "SELECT * FROM Products WHERE CategoryID = " + this.txtCategoryID1.Value.ToString(); rpt.DataSource = childDataSource; SubReport1.Report = rpt; |
レポートを表示する