ActiveReportsでは、アンバウンドレポート内でグループ化することができます。グループ化の設定は、テキストボックスのDataFieldプロパティを使用するのと同じ要領で、グループヘッダのDataFieldプロパティを使用して、データベースからグループ化するデータを取得します。
このトピックでは、以下のタスクを行います。
- Visual StudioプロジェクトにActiveReportsを追加する
- レポートをデータソースに接続するためにコードを追加する
- レポートのレイアウトを作成する
- DataInitializeイベントを使用して、レポートのフィールドコレクションにフィールドを追加する
- FetchDataイベントを使用して、レポートフィールドにデータを格納する
- データソースの接続を閉じるためのコードを追加する
- レポートを表示する
|
メモ: このチュートリアルは、Northwindデータベース(NWind.mdb)のテーブルを使用しています。使用にはNorthwindデータベース(..ActiveReportsNET12\Data\NWind.mdb)へのアクセス権限が必要です。 |
チュートリアルを完了すると、次のレポートが作成されます。
デザイン時のレイアウト
実行時のレイアウト
VisualStudioプロジェクトにActiveReportを追加する
- Visual Studioで新規プロジェクトを開きます。
- [プロジェクト]メニューから [新しい項目の追加]を選択します。
- [新しい項目の追加]ダイアログで[ActiveReports 12.0Jセクションレポート(コード)]を選択し、ファイル名前を「rptGroupUnboud」に変更します。
- [追加]ボタンをクリックします。
詳細については、「プロジェクトにレポートを追加する」を参照してください。
レポートをデータソースに接続するためにコードを追加する
- レポートの下部にあるグレーの領域をダブルクリックし、レポートのReportStartイベントのイベント処理メソッドを作成します。
- ハンドラに次のコードを追加します。
- データソースの接続文字列を設定する
- データソースのSQLクエリを設定する
- 接続を開いてデータリーダーからデータを取得する
Visual Basic
Visual Basicコード (ReportStartイベントの上に貼り付けます) |
コードのコピー
|
Dim connection As System.Data.OleDb.OleDbConnection
Dim reader As System.Data.OleDb.OleDbDataReader
|
Visual Basicコード (ReportStartイベント内に貼り付けます) |
コードのコピー
|
'データ接続を作成し、必要に応じデータソースのパスを変更する
Dim connectionString As String
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\ActiveReportsNET12\Data\Nwind.mdb"
connection = New System.Data.OleDb.OleDbConnection(connectionString)
connection.Open()
Dim sqlString As String
sqlString = "SELECT * FROM categories INNER JOIN products ON categories.categoryid= products.categoryid ORDER BY categories.CategoryID"
Dim command As New System.Data.OleDb.OleDbCommand(sqlString, connection)
'データを取得する
reader = command.ExecuteReader()
|
C#
C#コード (ReportStartイベントの上に貼り付けます) |
コードのコピー
|
private System.Data.OleDb.OleDbConnection connection;
private System.Data.OleDb.OleDbDataReader reader;
|
C#コード (ReportStartイベント内に貼り付けます) |
コードのコピー
|
//データ接続を作成し、必要に応じデータソースのパスを変更する
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\ActiveReportsNET12\Data\Nwind.mdb";
connection=new System.Data.OleDb.OleDbConnection(connectionString);
connection.Open();
string sqlString = "SELECT * FROM categories INNER JOIN products ON categories.categoryid = products.categoryid ORDER BY categories.CategoryID";
System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(sqlString, connection);
//データを取得する
reader = command.ExecuteReader();
|
レポートのレイアウトを作成する
- レポートのデザイナ面を右クリックして、表示されるコンテキストメニューから[挿入]を選択して[グループヘッダ/フッタ]を選択し、GroupHeader/Footerセクションを追加します。
- GroupHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
プロパティの値 |
Name |
ghCategories |
BackColor |
Silver |
CanShrink |
True |
DataField |
CategoryID |
GroupKeepTogether |
All |
KeepTogether |
True |
- GroupFooterセクションを選択し、[プロパティ]ウィンドウからNameプロパティを「gfCategories」に変更します。
- Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定します。
- ツールボックスからGroupHeaderセクションに以下のコントロールを追加し、[プロパティ]ウィンドウで各プロパティを次のように設定します。
TextBox1
プロパティ名 |
プロパティの値 |
DataField |
CategoryName |
Name |
txtCategoryName |
Text |
カテゴリー名 |
Location |
0, 0 in |
Size |
2, 0.2 in |
ForeColor |
Blue |
BackColor |
Silver |
Font Size |
12 |
Font Bold |
True |
TextBox2
プロパティ名 |
プロパティの値 |
DataField |
Description |
Name |
txtDescription |
Text |
説明 |
Location |
0, 0.3 in |
Size |
6, 0.2 in |
Label1
プロパティ名 |
プロパティの値 |
Name |
lblProductName |
Text |
商品名 |
Location |
0, 0.6 in |
Font Bold |
True |
Label2
プロパティ名 |
プロパティの値 |
Name |
lblUnitsInStock |
Text |
在庫 |
Location |
4.4, 0.6 in |
Font Bold |
True |
Alignment |
Right |
- ツールボックスから、Detailセクションに[Textbox]コントロールを2つ追加し、[プロパティ]ウィンドウで各プロパティを次のように設定します。
TextBox1
プロパティ名 |
プロパティの値 |
DataField |
ProductName |
Name |
txtProductName |
Text |
商品名 |
Location |
0, 0 in |
Size |
4, 0.2 in |
TextBox2
プロパティ名 |
プロパティの値 |
DataField |
UnitsInStock |
Name |
txtUnitsInStock |
Text |
在庫 |
Location |
4.4, 0 in |
Alignment |
Right |
- ツールボックスから、GroupFooterセクションに以下のコントロールを追加して、[プロパティ]ウィンドウで各プロパティを次のように設定します。
Label
プロパティ名 |
プロパティの値 |
DataField |
TotalLabel |
Name |
lblTotalLabel |
Location |
2, 0 in |
Size |
2.4, 0.2 in |
TextBox
プロパティ名 |
プロパティの値 |
DataField |
ProductName |
Name |
txtTotalItems |
Text |
全アイテム |
Location |
4.4, 0 in |
SummaryType |
SubTotal |
SummaryFunc |
Count |
SummaryRunning |
Group |
SummaryGroup |
ghCategories |
Alignment |
Right |
Line
プロパティ名 |
プロパティの値 |
Name |
Line1 |
LineWeight |
3 |
X1 |
1.2 |
X2 |
6.45 |
Y1 |
0 |
Y2 |
0 |
- Page Headerセクションを右クリックして[削除]を選択します。
DataInitializeイベントを使用して、レポートのフィールドコレクションにフィールドを追加する
|
注意: FieldCollectionには、DataInitializeイベントまたはFetchDataイベントを使用してアクセスしてください。他のイベントからアクセスした場合、動作は保障されません。 |
Visual Basic
- レポートのデザイナ面を右クリックし、[コードの表示]を選択します。
- レポートのコードビューの左上にあるドロップダウンの矢印をクリックして、レポートの名前 イベントを選択します。
- レポートのコードビューの右上にあるドロップダウンの矢印をクリックして、DataInitializeを選択します。これにより、レポートのDataInitializeイベントのイベント処理メソッドが作成されます。
- ハンドラに次のようなコードを追加し、レポートのフィールドコレクションにフィールドを追加します。
Visual Basicコード (DataInitializeイベント内に貼り付けます) |
コードのコピー
|
Fields.Add("CategoryID")
Fields.Add("CategoryName")
Fields.Add("ProductName")
Fields.Add("UnitsInStock")
Fields.Add("Description")
Fields.Add("TotalLabel")
|
C#
- デザインビューで、レポートの下部のグレーの領域をクリックしてレポート選択します。
- [プロパティ]ウィンドウにあるイベントのアイコンをクリックして、このレポートで使用できるイベントを表示します。
- DataInitializeをダブルクリックします。これにより、レポートのDataInitializeイベントのイベント処理メソッドが作成されます。
- ハンドラに次のようなコードを追加し、レポートのフィールドコレクションにフィールドを追加します。
C#コード (DataInitializeイベント内に貼り付けます) |
コードのコピー
|
Fields.Add("CategoryID");
Fields.Add("CategoryName");
Fields.Add("ProductName");
Fields.Add("UnitsInStock");
Fields.Add("Description");
Fields.Add("TotalLabel");
|
FetchDataイベントを使用して、レポートフィールドにデータを格納する
Visual Basic
- レポートのコードビューの左上にあるドロップダウンの矢印をクリックし、レポートの名前 イベントを選択します。
- レポートのコードビューの右上にあるドロップダウンの矢印をクリックし、FetchDataを選択します。これにより、レポートのFetchDataイベントのイベント処理メソッドが作成されます。
- ハンドラに次のようなコードを追加し、レポートのフィールドにデータを格納します。
Visual Basicコード (FetchDataイベント内に貼り付けます) |
コードのコピー
|
Try
reader.Read()
Me.Fields("CategoryID").Value = reader("categories.CategoryID")
Me.Fields("CategoryName").Value = reader("CategoryName")
Me.Fields("ProductName").Value = reader("ProductName")
Me.Fields("UnitsInStock").Value = reader("UnitsInStock")
Me.Fields("Description").Value = reader("Description")
Me.Fields("TotalLabel").Value = reader("CategoryName") + "の合計:"
eArgs.EOF = False
Catch
eArgs.EOF = True
End Try
|
C#
- デザインビューで、レポートの下部にあるグレーの領域をクリックしてレポートを選択します。
- [プロパティ]ウィンドウにあるイベントのアイコンをクリックして、このレポートで使用できるイベントを表示します。
- FetchDataをダブルクリックします。これにより、レポートのFetchDataイベントのイベント処理メソッドが作成されます。
- ハンドラに次のようなコードを追加し、レポートのフィールドにデータを格納します。
C#コード (FetchDataイベント内に貼り付けます) |
コードのコピー
|
try
{
reader.Read();
Fields["CategoryID"].Value = reader["categories.CategoryID"].ToString();
Fields["CategoryName"].Value = reader["CategoryName"].ToString();
Fields["ProductName"].Value = reader["ProductName"].ToString();
Fields["UnitsInStock"].Value = reader["UnitsInStock"].ToString();
Fields["Description"].Value = reader["Description"].ToString();
Fields["TotalLabel"].Value = reader["CategoryName"].ToString() + "の合計:";
eArgs.EOF = false;
}
catch
{
eArgs.EOF = true;
}
|
データソースの接続を閉じるためのコードを追加する
Visual Basic
- レポートのコードビューで、左上にあるドロップダウンの矢印をクリックし、レポートの名前 イベントを選択します。
- レポートのコードビューで、右上にあるドロップダウンの矢印をクリックし、ReportEndを選択します。これにより、レポートのReportEndイベントのイベント処理メソッドが作成されます。
- ハンドラに次のようなコードを追加し、データソースの接続を閉じます。
Visual Basicコード (ReportEndイベント内に貼り付けます) |
コードのコピー
|
reader.Close()
connection.Close()
|
C#
- デザインビューで、レポートの下部にあるグレーの領域をクリックしてレポートを選択します。
- [プロパティ]ウィンドウにあるイベントのアイコンをクリックして、このレポートで使用できるイベントを表示します。
- ReportEndをダブルクリックします。これにより、レポートのReportEndイベントのイベント処理メソッドが作成されます。
- ハンドラに次のようなコードを追加し、データソースの接続を閉じます。
C#コード (ReportEndイベント内に貼り付けます) |
コードのコピー
|
reader.Close();
connection.Close();
|
レポートを表示する
- デザイン時にレポートを表示するには、プレビュータブをクリックします。
または