次のトピックでは、FlexReportDesigner アプリケーションとコードを使用してレポート定義を作成する方法について説明します。レポート定義の作成は、レポートのレンダリングとは異なることに注意してください。レポートのレンダリングは、既存のレポート定義をロードし、C1FlexReport.Render メソッドを呼び出すだけで行うことができます。レポート定義を作成する最も簡単な方法は、C1FlexReportDesigner を使用することです。これは、Microsoft Access のレポートデザイナや Crystal Report に似たスタンドアロンアプリケーションです。
C1FlexReport ウィザードは、新しいレポートの作成手順を最初から最後までガイドします。次の手順に従います。
C1FlexReportDesigner が開き、C1FlexReport ウィザードによる 5 つの簡単な手順のガイドが開始されます。
C1FlexReport ウィザードで、次の 5 つの手順を実行してレポートを作成します。
新しいレポートのデータソースを選択します。
このページを使用して、レポートデータの取得に使用される DataSource.ConnectionString と DataSource.RecordSource を選択します。
DataSource.ConnectionString は、次の 3 つの方法で指定できます。
DataSource.RecordSource の文字列は、次の 2 つの方法で指定できます。
手順 1 の実行
次の手順を実行します。
次に例を示します。
select * from products
レポートに含めるフィールドを選択します。
このページには、手順 1 で選択したレコードセットにあるフィールドのリスト、およびレポートのグループフィールドと詳細フィールドを定義する 2 つのリストが表示されます。グループフィールドはデータのソート方法と集計方法を定義し、詳細フィールドはレポートに表示する情報を定義します。
マウスポインタを使用してドラッグすることで、リスト間でフィールドを移動することができます。フィールドを[詳細]リストにドラッグしてレポートに入れたり、リスト内でフィールドをドラッグして順序を変更することができます。レポートからフィールドを削除する場合は、フィールドをドラッグして[利用可能なフィールド]リストに戻します。
手順 2 の実行
次の手順を実行します。
新しいレポートのレイアウトを選択します。
このページには、ページ内でのデータの構成方法を定義するいくつかのオプションが用意されています。レイアウトを選択すると、左側にサムネイルプレビューが表示され、ページ内でレイアウトがどのように表示されるかを確認できます。2 つのレイアウトグループがあります。1 つは、グループなしのレポート用のレイアウトグループ、もう 1 つはグループありのレポート用のレイアウトとグループです。目的とするレポートの最終的な外観に最も近いレイアウトを選択してください。
また、このページでは、用紙の方向と、フィールドをページ幅に合わせて調整するかどうかを選択できます。
[ラベル]レイアウトオプションを使用して、Avery スタイルのラベルを印刷します。このオプションを選択すると、印刷するラベルの種類を指定するためのページが表示されます。
手順 3 の実行
次の手順を実行します。
新しいレポートのスタイルを選択します。
このページでは、新しいレポートで使用するフォントと色を選択できます。前のページと同様に、プレビューが表示され、各スタイルがどのように表示されるかを確認できます。最適なスタイルを選択します(スタイルは後で変更したり、詳細に調整することができます)。
手順 4 の実行
Verdana スタイルを選択します。
[次へ]をクリックします。ウィザードに従って残りの手順を実行します。
新しいレポートのタイトルを選択します。
この最後の手順のページでは、新しいページのタイトルを選択します。また、新しいレポートをすぐにプレビューするか、プレビューする前に編集モードに移動してデザインに手を加えるかを指定します。
手順 5 の実行
[レポートのプレビュー]を選択し、[完了]をクリックします。
デザイナのプレビューペインにレポートが直ちに表示されます。
レポートに何らかの調整が必要なことに気づくことがあります。レポートの修正方法については、次の手順で説明します。
以下の手順では、FlexReportDesigner アプリケーションまたはコードを使用してレポート定義を作成する方法について説明します。独自のレポートデザイナを記述したり、アドホックなレポートジェネレータを作成することもできます。
この例では、コードを使用して、C1NWind データベースに基づく単純な表形式のレポート定義を作成します。コードにはコメントが付けられ、C1FlexReport オブジェクトモデルの最も重要な要素が例示されています。次の手順を実行します。
Button.Name = btnEmployees
C1FlexReport.Name = c1FlexReport1 (C# でのデフォルト名)
C1FlexViewer.Name = c1FlexViewer1 (C# でのデフォルト名)
次に、C1NWind.mdb データベースから必要なデータを取得するように DataSource オブジェクトを設定します。それには、ConnectionString プロパティと RecordSource プロパティを使用します。
次に、ページ内のレポートのレイアウト方法を定義する Layout オブジェクトを初期化します。ここでは、レポートを Portrait(縦)モードでレンダリングし、Width を 6.5 インチ(ページ幅 8.5 インチから、両側のマージン各 1 インチを引いた値)に設定します。
次の手順は、興味深いものです。すべてのレポートには、5 つの基本セクション(詳細、レポートヘッダー、レポートフッター、ページヘッダー、ページフッター)があります。次のコードを使用して、レポートヘッダーを設定します。ここでは、いくつかのプロパティを設定し、タイトルフィールドを追加します。
上記のセクションオブジェクトには、Fields コレクションがあります。このコレクションの Add メソッドは、新しいフィールドを作成し、それをセクションに割り当てます。パラメータで、新しいフィールドの Name、Text、Left、Top、Width、Height の各プロパティを指定しています。デフォルトでは、フィールドのフォントはコントロールと同じです。このフィールドはタイトルなので、フォントを変更してサイズを大きくしています。フォントサイズに合わせてフィールドの高さを十分大きくしてください。そうしないと、何も表示されなくなります。
次に、ページフッターセクションを設定します。このセクションは、テキストフィールドに式が含まれており、さらに興味深くなっています。テキストフィールド内の式を評価するには、TextField.Text.Expression プロパティに式を設定するだけです。テキストフィールド内の式は、レポートのレンダリング時に評価されます。C1Report では、フィールドの Calculated プロパティを True に設定することで、同じことを実現できます。ページフッターを作成するには、次のコードを追加します。
このページフッターセクションの式では、VBScript 固有の変数ではなく、C1FlexReport で定義されている変数を使用しています。Page と Pages は、現在のページ番号と総ページ数が格納される変数です。このセクションでは、直線として表示されるように設定されたフィールドも使用されています。
次に、ページヘッダーセクションを設定します。このセクションは、各ページの上部にレンダリングされ、フィールドラベルが表示されます。ページヘッダーセクションを使用してフィールドラベルを表示するテクニックは、表形式のレポートでよく使用されます。コードは単純ですが、すべてのフィールドのサイズを指定しているため、見た目は多少煩雑です。実際のアプリケーションでは、これらの値はプログラムに組み込まれません。フィールドラベルを含むページヘッダーを作成するには、次のコードを追加します。
このコードは、フォントを処理するための強力なテクニックを示しています。すべてのフィールドは、作成時にコントロールのフォントを継承するため、フィールドを作成する前にコントロールの Font.Bold プロパティを True に設定し、後で False に戻します。これで、ページヘッダーセクション内のすべてのコントロールのフォントが太字になります。
詳細セクションを追加して、レポートを完成させます。このセクションが、実際のデータを表示するセクションです。詳細セクションでは、ページヘッダーセクションの各ラベルの下のテキストフィールドに式を設定します。詳細セクションを作成するには、次のコードを追加します。
すべてのテキストフィールドに式が含まれており、各テキストフィールドはソースレコードソース内のフィールド名に対応しています。TextField.Text.Expression プロパティに式を設定することで、Text プロパティは、リテラルとしてレンダリングされるのではなく、データベースのフィールド名として解釈されます。レポートのフィールド名がレコードセットのフィールド名とは異なる一意の名前となるような命名規則を採用することが重要です。たとえば、「LastName」という名前のフィールドが 2 つあると、「Left(LastName,1)」のような式はあいまいになります。この例では、レポートのフィールド名はすべて「Fld」で始まるという命名規則を採用しました。
「FldNotes」フィールドは、AutoHeight プロパティが CanGrow に設定され、他のフィールドより小さいフォントが設定されています。これは、データベースの「Notes」フィールドに長いテキストが含まれていても、レポートに表示されるようにするためです。フィールドの高さを大きく設定して無駄なスペースを作るのではなく、AutoHeight プロパティを CanGrow に設定して、コンテンツに合わせて必要に応じてフィールドが拡大するようにしています。また、このフィールドを含むセクションの AutoHeight プロパティも True に設定して、フィールドがセクションからはみ出さないようにしています。
これで、レポート定義は完了です。レポートを C1FlexViewer コントロールにレンダリングするには、Employees ボタンをダブルクリックして、btnEmployees_Click イベントにイベントハンドラを追加します。コードエディタが表示され、イベントハンドラ内に挿入ポイントが配置されます。次のコードを入力します。
基本レポートの外観は次のようになります。