基本レイアウトの設計後、特定のフィールドまたはその他の基準によりレコードのグループ化を指定して、レポートを読みやすくできます。グループ化によって、レコードのグループを視覚的に分類し、各グループの紹介および概要データを表示できます。区切りグループは、グループ化式に基づきます。通常、この式は、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; |
グループオブジェクトを使用したレポートの例を以下に示します。