Reports for WinForms
データのグループ化
C1Report の使い方 > グループ化とソート > データのグループ化

基本レイアウトの設計後、特定のフィールドまたはその他の基準によりレコードのグループ化を指定して、レポートを読みやすくできます。グループ化によって、レコードのグループを視覚的に分類し、各グループの紹介および概要データを表示できます。区切りグループは、グループ化式に基づきます。通常、この式は、1つ以上のレコードセットフィールドに基づきますが、必要に応じて複雑にすることができます。

C1ReportDesigner アプリケーションを使用するか、またはコードを使用して、レポート内のデータをグループ化できます。

C1ReportDesigner を使用したグループ化とソートの追加

グループは、[グループヘッダー]と[グループフッター]セクションの表示を予定していない場合であっても、データのソートにも使用されます。C1ReportDesigner アプリケーションを使用して、グループをレポートに追加できます。

レポートにグループを追加したり、レポート内のグループを編集したりするには、以下の手順を実行します。

  1. C1ReportDesigner アプリケーションを開きます。詳細については、「Visual Studio からの C1Report デザイナへのアクセス」を参照してください。
  2. 「デザイン」タブにある〈ソートとグループ化〉ボタンをクリックします。[ソートとグループ化]ダイアログボックスが表示されます。このダイアログボックスを使用して、グループの作成、編集、順序変更、および削除を行えます。
  3. グループを作成するには、〈追加〉ボタンをクリックし、新しいグループのプロパティを設定します。[グループ化]フィールドは、レポート内でレコードをグループ化する方法を定義します。単純なグループ化では、ドロップダウンリストから直接フィールドを選択できます。複雑なグループ化では、グループ化式を入力できます。たとえば、[]を使用して国別にグループ化したり、[Left(Country, 1)]を使用して国の頭文字別にグループ化したりできます。
  4. このレポートに沿って、[グループ化]式で[]を選択します。
  5. 次に、希望するソートのタイプを選択します(この例では、[昇順])。新しいグループに視覚的な[グループヘッダー]と[グループフッター]セクションを設定するかどうか、およびグループを1ページ上に一緒に表示するかどうかも指定できます。
メモ:メモまたはバイナリ(オブジェクト)フィールドを、グループ化およびソートに使用することはできません。これは OLEDB によって与えられた制限です。

この時点で、[ソートとグループ化]ダイアログボックスは以下のように表示されます。

さらに追加する場合は、[グループ]リストの右側にある矢印ボタンを使用して、これらの順序を変更できます。この結果、レポート内の[グループヘッダー]と[グループフッター]セクションの位置が自動的に調整されます。フィールドを削除するには、〈削除〉ボタンを使用します。

フィールドの配置が完了したら、〈OK〉をクリックしてダイアログボックスを閉じて、デザイナで変更内容を確認します。新しいグループに、新しい[グループヘッダー]と[グループフッター]セクションが表示されます。この時点では、両方とも高さがゼロですが、端部をマウスでドラッグして、これらを拡大できます。[グループヘッダー]が表示され、[グループフッター]が表示されないことに注意してください。これは、ダイアログのボックスで〈グループヘッダー〉ボタンが ON になり、〈グループフッター〉ボタンが OFF のままになっているためです。表示されないセクションは、ハッチングパターンで表示され、不可視であることを示します。

新しいセクションの上部にマークされた黄褐色のバーには、セクション名とグループの GroupBy プロパティの値を含むラベルがあります。

グループの動作を確認するには、〈データフィールドの追加〉ボタン をクリックし、メニューから[]を選択して、新規に作成した[グループヘッダー]セクション内の領域をマークします。新しいフィールドをクリックし、それを選択して、新しいフィールドが少し目立つように、そのFontプロパティを変更します。

コードを使用したグループ化とソートの追加

効果的なレポートは単にデータを表示するのではなく、整理された状態で表示します。C1Report は、グループを使用してデータをグループ化し、ソートします。この動作を説明するために、「レポート定義の作成」トピックのコードに戻り、社員を国別にグループ化します。

次のコードは、レコードを国別にソートし、グループ化するグループオブジェクトを作成します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
If chkGroup.Checked Then           

  ' 社員を昇順で国別にグループ化します            
  Dim grp As Group            
  grp = c1r.Groups.Add("GrpCountry", "Country", SortEnum.Ascending)

  ' 新しいグループの[グループヘッダー]セクションを書式設定します            
  With grp.SectionHeader            
    .Height = 500            
    .Visible = True            
    f = .Fields.Add("CtlCountry", "Country", 0, 0, c1r.Layout.Width, 500)            
    f.Calculated = True            
    f.Align = FieldAlignEnum.LeftMiddle            
    f.Font.Bold = True            
    f.Font.Size = 12            
    f.BorderStyle = BorderStyleEnum.Solid            
    f.BorderColor = Color.FromArgb(0, 0, 150)           
    f.BackStyle = BackStyleEnum.Opaque            
    f.BackColor = Color.FromArgb(150, 150, 220)            
    f.MarginLeft = 100            
  End With
    
  ' 各国内のファーストネームによって社員をソートします            
  c1r.Groups.Add("GrpName", "FirstName", SortEnum.Ascending)            
End Ifデータのグループ化

C# コードの書き方

C#
コードのコピー
if (chkGroup.Checked)            
{            
  // 社員を昇順で国別にグループ化します            
   Group grp = c1r.Groups.Add("GrpCountry", "Country", SortEnum.Ascending);
 
  //  新しいグループの[グループヘッダー]セクションを書式設定します            
  s = grp.SectionHeader;            
    s.Height = 500;            
    s.Visible = true;           
    f = s.Fields.Add("CtlCountry", "Country", 0, 0, c1r.Layout.Width, 500);            
    f.Calculated = true;            
    f.Align = FieldAlignEnum.LeftMiddle;            
    f.Font.Bold = true;            
    f.Font.Size = 12;            
    f.BorderStyle = BorderStyleEnum.Solid;            
    f.BorderColor = Color.FromArgb(0, 0, 150);            
    //f.BackStyle = BackStyleEnum.Opaque;            
    f.BackColor = Color.Transparent;            
    f.BackColor = Color.FromArgb(150, 150, 220);            
    f.MarginLeft = 100;
      
  // 各国内のファーストネームによって社員をソートします            
  c1r.Groups.Add("GrpName", "FirstName", SortEnum.Ascending);            
}

各グループには、[グループヘッダー]と[グループフッター]セクションがあります。デフォルトでは非表示ですが、上記のコードは[グループヘッダー]セクションを可視化し、グループを定義する国を表示します。次に、国を示すフィールドを追加します。新しいフィールドは、無地の背景色で表示されます。

最後に、コードは、第2グループを追加し、各国内でファーストネームによって社員をソートします。このグループは、ソートにのみ使用されます。このため、[グループヘッダー]と[グループフッター]セクションは非表示のままになります。

これで変更が完了しました。新しいレポートを表示するには、Render メソッドを含むルーチンを終了する必要があります。次のコードを btnEmployees_Click イベントハンドラに追加します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
' レポートを PrintPreviewControl に表示します            
ppv.Document = c1r.Document

C# コードの書き方

C#
コードのコピー
// レポートを PrintPreviewControl に表示します            
ppv.Document = c1r.Document;

グループオブジェクトを使用したレポートの例を以下に示します。