ActiveReports for .NET 18.0J
アンバウンドレポートでのグループ化
ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > セクションレポートのチュートリアル > レイアウト > アンバウンドレポートでのグループ化

ActiveReportsでは、アンバウンドレポート内でグループ化することができます。グループ化の設定は、テキストボックスのDataFieldプロパティを使用するのと同じ要領で、グループヘッダのDataFieldプロパティを使用して、データベースからグループ化するデータを取得します。

このトピックでは、以下のタスクを行います。

メモ: このチュートリアルは、Northwindデータベース(NWind.mdb)のテーブルを使用しています。使用にはNorthwindデータベース(..ActiveReportsNET18\Samples\Data\NWind.mdb)へのアクセス権限が必要です。

チュートリアルを完了すると、次のレポートが作成されます。

デザイン時のレイアウト

実行時のレイアウト

VisualStudioプロジェクトにActiveReportを追加する

  1. Visual Studioで新規プロジェクトを開きます。
  2. [プロジェクト]メニューから [新しい項目の追加]を選択します。
  3. [新しい項目の追加]ダイアログで[ActiveReports 18.0Jセクションレポート(コード)]を選択し、ファイル名前を「rptGroupUnboud」に変更します。
  4. [追加]ボタンをクリックします。

詳細については、「クイックスタート」を参照してください。

レポートをデータソースに接続するためにコードを追加する

  1. レポートの下部にあるグレーの領域をダブルクリックし、レポートのReportStartイベントのイベント処理メソッドを作成します。
  2. ハンドラに次のコードを追加します。
    • データソースの接続文字列を設定する
    • データソースの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\ActiveReportsNET18\Samples\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\ActiveReportsNET18\Samples\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();
    

レポートのレイアウトを作成する

  1. レポートのデザイナ面を右クリックして、表示されるコンテキストメニューから[挿入]を選択して[グループヘッダ/フッタ]を選択し、GroupHeader/Footerセクションを追加します。
  2. GroupHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Name ghCategories
    BackColor Silver
    CanShrink True
    DataField CategoryID
    GroupKeepTogether All
    KeepTogether True
  3. GroupFooterセクションを選択し、[プロパティ]ウィンドウからNameプロパティを「gfCategories」に変更します。
  4. Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定します。
  5. ツールボックスから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
  6. ツールボックスから、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
  7. ツールボックスから、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
  8. Page Headerセクションを右クリックして[削除]を選択します。

DataInitializeイベントを使用して、レポートのフィールドコレクションにフィールドを追加する

注意: FieldCollectionには、DataInitializeイベントまたはFetchDataイベントを使用してアクセスしてください。他のイベントからアクセスした場合、動作は保障されません。

Visual Basic

  1. レポートのデザイナ面を右クリックし、[コードの表示]を選択します。
  2. レポートのコードビューの左上にあるドロップダウンの矢印をクリックして、レポートの名前 イベントを選択します。
  3. レポートのコードビューの右上にあるドロップダウンの矢印をクリックして、DataInitializeを選択します。これにより、レポートのDataInitializeイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次のようなコードを追加し、レポートのフィールドコレクションにフィールドを追加します。
Visual Basicコード (DataInitializeイベント内に貼り付けます)
コードのコピー
Fields.Add("CategoryID") 
Fields.Add("CategoryName") 
Fields.Add("ProductName") 
Fields.Add("UnitsInStock") 
Fields.Add("Description") 
Fields.Add("TotalLabel")

C#

  1. デザインビューで、レポートの下部のグレーの領域をクリックしてレポート選択します。
  2. [プロパティ]ウィンドウにあるイベントのアイコンをクリックして、このレポートで使用できるイベントを表示します。
  3. DataInitializeをダブルクリックします。これにより、レポートのDataInitializeイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次のようなコードを追加し、レポートのフィールドコレクションにフィールドを追加します。
C#コード (DataInitializeイベント内に貼り付けます)
コードのコピー
Fields.Add("CategoryID");
Fields.Add("CategoryName");
Fields.Add("ProductName");
Fields.Add("UnitsInStock");
Fields.Add("Description");
Fields.Add("TotalLabel");

FetchDataイベントを使用して、レポートフィールドにデータを格納する

Visual Basic

  1. レポートのコードビューの左上にあるドロップダウンの矢印をクリックし、レポートの名前 イベントを選択します。
  2. レポートのコードビューの右上にあるドロップダウンの矢印をクリックし、FetchDataを選択します。これにより、レポートのFetchDataイベントのイベント処理メソッドが作成されます。
  3. ハンドラに次のようなコードを追加し、レポートのフィールドにデータを格納します。
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#

  1. デザインビューで、レポートの下部にあるグレーの領域をクリックしてレポートを選択します。
  2. [プロパティ]ウィンドウにあるイベントのアイコンをクリックして、このレポートで使用できるイベントを表示します。
  3. FetchDataをダブルクリックします。これにより、レポートのFetchDataイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次のようなコードを追加し、レポートのフィールドにデータを格納します。
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

  1. レポートのコードビューで、左上にあるドロップダウンの矢印をクリックし、レポートの名前 イベントを選択します。
  2. レポートのコードビューで、右上にあるドロップダウンの矢印をクリックし、ReportEndを選択します。これにより、レポートのReportEndイベントのイベント処理メソッドが作成されます。
  3. ハンドラに次のようなコードを追加し、データソースの接続を閉じます。
Visual Basicコード (ReportEndイベント内に貼り付けます)
コードのコピー
reader.Close() 
connection.Close()

C#

  1. デザインビューで、レポートの下部にあるグレーの領域をクリックしてレポートを選択します。
  2. [プロパティ]ウィンドウにあるイベントのアイコンをクリックして、このレポートで使用できるイベントを表示します。
  3. ReportEndをダブルクリックします。これにより、レポートのReportEndイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次のようなコードを追加し、データソースの接続を閉じます。
C#コード (ReportEndイベント内に貼り付けます)
コードのコピー
reader.Close();
connection.Close();

レポートを表示する

または