セクションレポートでは、Subreportコントロールを使用し、複数の子レポートを含むことができます。子レポート(サブレポート)は、親セクション(Subreportコントロールが配置されたセクション)が出力されるたびに実行されます。このチュートリアルでは、親レポートのデータからサブレポートのレコードソースを変更して、現在の情報を取得する方法について説明します。
このトピックでは、以下のタスクを行います。
- Visual Studioプロジェクトに親レポートとサブレポートを追加する
- 親レポートをデータソースに接続する
- 親レポートのレイアウトを作成する
- 子レポートのレイアウトを作成する
- サブレポートのインスタンスを作成するコードを追加する
- 子レポートにデータソースを割り当てるコードを追加する
- レポートを表示する
 |
メモ: このチュートリアルではNorthwindデータベースを使用しています。Northwind.mdbデータベース(..ActiveReportsNET9\Data\Nwind.mdb)へのアクセス権限が必要です。 |
チュートリアルを完了すると、次のレポートが作成されます。
設計時のレイアウト
実行時のレイアウト
Visual Studioプロジェクトに親レポートとサブレポートを追加する
- Visual Studioで新規プロジェクトを開きます。
- [プロジェクト]メニューから[新しい項目の追加]を選択します。
- [新しい項目を追加]ダイアログ から [ActiveReports 9.0 セクションレポート(コード)]を選択し、ファイル名を「rptMain」に変更します。
- [追加]のボタンをクリックします。
- [プロジェクト]メニューから[新しい項目の追加]を選択します。
- [新しい項目を追加]ダイアログ から [ActiveReports 9.0 セクションレポート(コード)]を選択し、ファイル名を「rptSub」に変更します。
- [追加]のボタンをクリックします。
詳細は、「プロジェクトにレポートを追加する」参照してください。
親レポートをデータソースに接続する
- Detailセクションのバンドから、[データソース]アイコンをクリックします。

- [レポートデータソース]ダイアログでは、[接続文字列]の横にある[OLE DB]タブの[作成]ボタンをクリックします。 詳細は、「レポートとデータソースの連結」を参照してください。
- [データリンクプロパティ]ウィンドウでは、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックして、[接続]タブへ移動します。
- (...)をクリックし、Nwind.mdbへのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
- [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
- [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
-
[OLE DB]タブの[クエリ]フィールドに以下のSQLクエリを入力します。
SQLクエリ |
コードのコピー
|
SELECT * FROM Categories |
- [OK] をクリックします。
親レポート(rptMain)のレイアウトを作成する
- デザイナ面より、グレーの領域をクリックし、[プロパティ]ウィンドウからPrintWidthプロパティを「5.75」に設定します。
- デザイナ面より、Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定し、空白スペースを削除します。
- ツールボックスから、PageHeaderセクション上に「Label」コントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
Name |
lblProductsbyCategory |
Text |
カテゴリ別の製品 |
Location |
0, 0 in |
Size |
5.75, 0.25 in |
Font Size |
14 |
Alignment |
Center |
- ツールボックスから、Detailセクション上に以下のコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
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)レイアウトを作成する
- デザイナ面より、Detailセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
CanShrink |
True |
BackColor |
AliceBlue |
 |
ヒント:レポートの最終的な出力結果に色を適用したくない場合であっても、サブレポートの背景に色を使用することで、レイアウト関連の問題を容易に見つけることができます。 |
- デザイナ面より、pageHeaderとpageFooterセクションを選択し、[削除]をクリックします。サブレポートはこのセクションを表示しないので、これらのセクションを削除すると処理時間を削減できます。
- ツールボックスから、Detailセクション上に[TextBox]コントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
DataField |
ProductName |
Name |
txtProductName |
Text |
製品名 |
Location |
0, 0 in |
Size |
2.25, 0.2 in |
サブレポートのインスタンスを作成するコードを追加する
 |
注意: Formatイベントでサブレポートの新しいインスタンスを作成しないでください。Formatを実行するごとに新しいサブレポートが作成されるので、大量のメモリが消費されます。 |
Visual Basic
- レポートのコードビューの上部左側のドロップダウンキーをクリックし、rptMainイベントを選択します。
- コードウィンドウの上部右側のドロップダウンキーをクリックし、ReportStartを選択し、レポートのReportStartイベントのイベント処理メソッドを作成します。
- ハンドラに以下のコードを追加し、サブレポートの新しいインスタンスを作成します。
Visual Basicコード (ReportStartイベントの上に貼り付けます) |
コードのコピー
|
Private rpt As rptSub
Private childDataSource As New GrapeCity.ActiveReports.Data.OleDBDataSource()
|
Visual Basicコード (ReportStartイベント内に貼り付けます) |
コードのコピー
|
rpt = New rptSub()
|
C#
- デザイナ面より、グレーの領域をクリックし、rptMainを選択します。
- [プロパティ]ウィンドウにあるイベントのアイコンをクリックし、レポートのイベントの一覧を表示します。
- ReportStartイベントをダブルクリックし、レポートのReportStartイベントのイベント処理メソッドを作成します。
- ハンドラに以下のコードを追加し、サブレポートの新しいインスタンスを作成します。
サンプルコードを示します。
C#コード (ReportStartイベントの上に貼り付けます) |
コードのコピー
|
private rptSub rpt;
private GrapeCity.ActiveReports.Data.OleDBDataSource childDataSource = new GrapeCity.ActiveReports.Data.OleDBDataSource();
|
C#コード (ReportStartイベント内に貼り付けます) |
コードのコピー
|
rpt = new rptSub();
|
子レポートにデータソースを割り当てるコードを追加する
- rptMainレポートのデザイナビューより、Detailセクションをダブルクリックし、Detail_Formatイベントのイベント処理メソッドを作成します。
- ハンドラにコードを追加し、以下の処理を実装します。
- サブレポートのOleDBデータソースの接続文字列を設定する
- 新しいデータソースにSQLクエリの設定と現在のレコードのCategoryIDを渡す
- サブレポートをデータソースに接続する
- rptSubをSubReportコントロールに割り当てる
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;
|
レポートを表示する
- 設計時にレポートを表示するには、プレビュータブをクリックします。
または
関連トピック