基本レイアウトの設計後、特定のフィールドまたはその他の基準によりレコードのグループ化を指定して、レポートを読みやすくできます。グループ化によって、レコードのグループを視覚的に分類し、各グループの紹介および概要データを表示できます。区切りグループは、グループ化式に基づきます。通常、この式は、1つ以上のレコードセットフィールドに基づきますが、必要に応じて複雑にすることができます。
C1ReportDesigner アプリケーションを使用するか、またはコードを使用して、レポート内のデータをグループ化できます。
C1ReportDesigner を使用したグループ化とソートの追加
グループは、[グループヘッダー]と[グループフッター]セクションの表示を予定していない場合であっても、データのソートにも使用されます。C1ReportDesigner アプリケーションを使用して、グループをレポートに追加できます。

レポートにグループを追加したり、レポート内のグループを編集したりするには、以下の手順を実行します。
この時点で、[ソートとグループ化]ダイアログボックスは以下のように表示されます。

さらに追加する場合は、[グループ]リストの右側にある矢印ボタンを使用して、これらの順序を変更できます。この結果、レポート内の[グループヘッダー]と[グループフッター]セクションの位置が自動的に調整されます。フィールドを削除するには、〈削除〉ボタンを使用します。
フィールドの配置が完了したら、〈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; |
|
グループオブジェクトを使用したレポートの例を以下に示します。
