Comments
Description
Transcript
FlexReport for WinForms - ComponentOne
FlexReport for WinForms 2017.01.24 作成 グレープシティ株式会社 FlexReport for WinForms 目次 FlexReport for WinForms の概要 C1Report から FlexReport へのアップグレード 5-7 FlexReport と C1Report 7-8 C1Report から FlexReport への重要な変更点 8-10 主要な機能 11 FlexReport の詳細情報 12 コンポーネントとコントロール 12 オブジェクトモデルの概要 12-13 FlexReport のセクション 13-15 FlexReport クイックスタート 16 手順 1:レポート定義の作成 16-26 手順 2:レポートの修正 26-29 手順 3:C1FlexReport コンポーネントでのレポートのロード 29-30 手順 4:レポートのレンダリング 30-31 設計時サポート 32 [C1FlexReport のタスク]メニュー 32 [C1FlexViewer のタスク]メニュー 32-33 FlexReport の操作 C1FlexReport と C1Document C1Document の重要な変更点 FlexReport のデータ連結 34-35 35 35-37 37 データベースからのデータの取得 37-38 ストアドプロシージャからのデータの取得 38-40 データテーブルオブジェクトをデータソースとして使用 カスタムデータソースオブジェクトの使用 FlexReport のデータソース コードを使用した複数のデータソースへの接続 40 40-41 41 41-42 複数データソースレポートでのチャートへのデータの連結 42-47 複数データソースレポートでのパラメータへのデータの連結 47-48 計算フィールドの定義 デスクトップ用 FlexReport の開発 1 5 48-49 49 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 設計時の FlexReport のロード 49-50 設計時の FlexReport の作成 50-51 実行時の FlexReport のロード 51-54 パラメータの追加 54-55 データのグループ化 55-57 小計などの集計の追加 57-60 クロス集計レポートの作成 60-66 データのソート 66-67 データのフィルタ処理 67-68 さまざまな形式へのレポートのエクスポート 68-69 VBScript の操作 69-71 VBScript の要素、オブジェクト、変数 71-75 互換性のための関数:Iif および Format 75-76 集計関数 76-78 FlexReport オブジェクトの分割の管理 フィールドの変更 78-79 79-81 データがないセクションの非表示 81-82 値に基づいたフィールドの表示/非表示 82-84 ページカウンタのリセット 84-85 FlexReportDesigner の操作 FlexReportDesigner について 85 86 86-88 [ファイル]メニュー 88-89 設計モード 89-90 [ホーム]タブ 90-94 [挿入]タブ 94-95 [調整]タブ 95-96 [ページ設定]タブ プレビューモード FlexReportDesigner オプションの設定 2 78 値に応じたフィールドの書式設定 サブセクションの追加 96 96-98 98-103 スタイルギャラリー 103-105 複数のサブセクションの追加 106-107 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport フィールドの追加 テキストフィールド RTF フィールド 107-109 109 パラグラフフィールド 109-111 チェックボックスフィールド 111-113 バーコードフィールド 113 バーコードシンボル 113-119 バーコードのプロパティ 119-120 計算フィールド 120-123 画像フィールド 123-124 図形フィールド 124 サブレポートフィールド チャートフィールド 124-128 128 チャートタイプ 128-134 設計時サポート 134-137 データバインドされたチャートでデータのプロット 137-138 非連結チャートでのデータのプロット 138-140 複数の系列を持つチャート 140-141 グループ化されたレポート内のチャート 141-143 FlexReport カスタムフィールドの追加 マップカスタムフィールド 143 143-144 マップカスタムフィールドのプロパティ 144-147 マップカスタムフィールドの追加 147-150 SuperLabel カスタムフィールド パラメータの操作 150-152 152-154 データ連結 154-155 計算フィールド 155-156 サブレポート 156-158 パラメータのカスケード 158-160 複数値パラメータ 160-161 パラメータの暗黙的な受け渡し 3 107 161 複数のデータソースの追加 161-163 FlexReport のデータソースの変更 163-164 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReportDesigner でデータのソート化 164-167 FlexReport のプレビューと印刷 167-168 FlexReportDesigner でのレポートのインポート 168-169 Microsoft Access レポートのインポート 169-172 Crystal Reports のインポート 172-175 レポートのエクスポートと公開 PDF/A へのエクスポート FlexReports の見栄えの向上 175-176 176 176-178 境界線 178-180 FlexViewer の主要な機能 181 181 FlexViewer ツールバー 181-182 レポートのビューを回転する 183-184 FlexReport と FlexViewer の連結 184-185 Flex ViewerでのPDFファイルの読み込み 185-188 SSRS レポートのプレビュー 188-190 タスク別ヘルプ 4 175 背景 レポートおよびドキュメントビューア(C1FlexViewer コントロール) 191 交互表示の背景の追加 191-192 条件付き書式設定の追加 192-194 カスタム用紙サイズの指定 194 動的ページヘッダーの追加 194-195 ガターマージンの作成 195-196 グループ化とソート 196-198 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport for WinForms の概要 ComponentOne Studio には、FlexReport for WinForms が導入されています。これは、C1Report を更新して高速化した 新しいコンポーネントです。 FlexReport は、複雑なレポートの作成からプレビュー、エクスポート、印刷まで、完全なレポートソリューションを提供する包括 的なレポートツールです。FlexReport は、優れたオブジェクトモデルを備え、プレビューコントロールやデザイナアプリケーショ ンとして最新のユーザーインタフェースを提供しています。これを使用して、魅力的で機能豊富なレポートを柔軟に生成できま す。FlexReportコントロールを操作するには、最小限必要なサーバー構成はWindows 7 SP1またはWindows Server 2008 R2 SP1用プラットフォーム更新(KB2670838)です。 データを集約した形式で提示し、レポートを設計およびカスタマイズし、FlexReport によって生成されたレポートに基づいて重 要なビジネス意思決定を行ってください。高品質なレンダリング、正確な計算、使いやすさにより、FlexReport は、基礎レベル のレポート設計者だけでなく上級レベルのレポート設計者にとっても必須のコントロールです。 C1Report から FlexReport へのアップグレード C1Report を使用して作成されたレポートは、C1FlexReport と完全に互換性があります。以下に、既存の C1Report レポー ト定義(.xml)を C1FlexReport レポート定義(.flxr)に簡単にアップグレードまたは変換する 2 つの方法を示します。 デザイナで C1Report レポート定義をアップグレードする 1. C1FlexReportDesigner.4.exe を実行します。 2. [ファイル] [ファイル]→[開く] [開く]に移動し、アップグレードする C1Report レポート定義(.xml)を選択します。次のダイアログボックス が表示されます。 3. [OK]]をクリックします。 4. [ファイル] [ファイル]→[保存] [保存]に移動します。 5. [レポート定義ファイルの保存] [レポート定義ファイルの保存]ダイアログボックスで、[ファイル名] [ファイル名]を指定し、[保存] [保存]をクリックします。 レポート定義がタイプ .flxr として保存されます。これで、レポート定義が C1Report の .xml から C1FlexReport の .flxr に変換 されました。 Visual Studio で既存の C1Report Windows アプリケーションプロジェクトを FlexReport Windows アプリケー ションプロジェクトにアップグレードする 1. 2. 3. 4. C1Report(.xml)ファイルを含む既存の Windows アプリケーションプロジェクトを開きます。 Form から C1Report を削除します。 Form から C1Report のプレビューコントロール C1PrintPreview または C1RibbonPreviewControl を削除します。 C1FlexReport コンポーネントをツールボックス ツールボックスに追加します。 a. タブを右クリックし、[アイテムの選択] [アイテムの選択]を選択します。[ツールボックスアイテムの選択] [ツールボックスアイテムの選択]ダイアログボックスが表 示されます。 b. [参照]をクリックし、bin\v4.0 フォルダから C1.Win.FlexReport.4.dll を選択します。C1FlexReport コンポー ネントがツールボックスに追加されます。 5. C1FlexViewer コントロールをツールボックス ツールボックスに追加します。 a. タブを右クリックし、[アイテムの選択] [アイテムの選択]を選択します。[ツールボックスアイテムの選択] [ツールボックスアイテムの選択]ダイアログボックスが表 示されます。 5 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms b. [参照]をクリックし、bin\v4.0 フォルダから C1.Win.FlexViewer.4.dll を選択します。C1FlexViewerコントロー ルがツールボックス ツールボックスに追加されます。 6. C1FlexReport を Form にドロップします。C1FlexReport のバージョンと同じバージョンの以下の dll が参照に追加さ れます。 C1.C1Pdf.4 C1.Win.4 C1.Win.BarCode.4 C1.Win.C1Document.4 C1.Win.FlexReport.4 これらの参照が同じバージョンでない場合は、それらを手動で追加する必要があります。 7. C1FlexViewer コントロールを Form にドロップします。C1FlexViewer のバージョンと同じバージョンの以下の dll が参 照に追加されます。 C1.C1Zip.4 C1.Win.C1DX.4 C1.Win.C1Ribbon.4 C1.Win.FlexViewer.4 C1.Win.ImportServices.4 これらの参照が同じバージョンでない場合は、それらを手動で追加する必要があります。 8. 以下の dll を参照に追加します。 C1.C1Word.4 C1.C1Excel.4 C1.Win.C1Chart.4 C1.Win.C1Chart3D.4 マップおよびスーパーラベルカスタムフィールドを使用する場合は、以下の dll を参照に追加します。 C1.Win.FlexReport.CustomFields.4 C1.WPF.Maps.4 C1.WPF.4 9. C1Report コンポーネントの名前を C1FlexReport コンポーネントに変更します。コードでは、次のようにしてコンポー ネントの名前を変更できます。 Visual Basic Dim report As New C1Report() ' 変更後 Dim report As New C1FlexReport() C# C1Report report = new C1Report(); //変更後 C1FlexReport report = new C1FlexReport(); 10. コードビハインドで、名前空間の名前を C1.C1Report から C1.Win.FlexReport に変更します。 11. C1Report とその依存関係(C1.C1Report、C1.Win.C1Report、C1.Win.C1Barcode、C1.Win.C1RibbonPreview)の dll へのすべての参照を削除します。 12. 名前空間 C1.Win.C1Preview を削除します。 13. licenses.licx から、C1Report と参照先ビューア(C1Preview または C1RibbonPreview)のライセンスエントリを削除し ます。 14. C1FlexReport と C1FlexViewer を連結するには、次のようにコードを変更する必要があります。 Visual Basic 6 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Dim c1r As C1.C1Report.C1Report = New C1Report() c1r.Load(filepath, reportname) C1PrintPreviewControl1.Document = clr ' 変更後 Dim report As New C1FlexReport() report.Load(filepath, reportname) C1FlexViewer1.DocumentSource = report C# C1.C1Report.C1Report c1r = new C1Report(); c1r.Load(filepath, reportname); c1PrintPreviewControl1.Document=clr; //変更後 C1FlexReport report = new C1FlexReport(); report.Load(filepath, reportname); c1FlexViewer1.DocumentSource = report; FlexReport は、実行時に C1FlexViewer コントロールを使用してのみプレビューできることに注意してください。 C1FlexViewer コントロールは、C1PrintPreviewControl または C1RibbonPreviewControl と互換性がありません。 FlexReport と C1Report FlexReport は、C1Report を新しく機能強化した製品です。主に次の相違点があります。 レポートフィールドタイプの階層 FlexReport の Field オブジェクトの構造は階層的であり、基本クラス FieldBase と他のさまざまなクラスタイプを使用して、さまざまなフィールドを表しま す。テキスト、画像、形状、サブレポートなどの各種データを表すために、さまざまなタイプのレポートフィールドがあります。FlexReport の Field オブ ジェクト階層の利点として、フィールドの操作がたいへん容易かつ柔軟になることがあります。 一方、C1Report のフィールドオブジェクトは複雑で、C1.C1Report.Field.Text プロパティを定義し、Calculated を True に設定する必要があります。 この場合は、各フィールドがレコードごとに個別に評価される式として解釈されるため、C1Report のフィールドはデータのレンダリングプロセスが低速 になります。 これらの事情にもかかわらず、FlexReport のフィールドタイプは C1Report のフィールドタイプと完全に互換性があり、FlexReport で C1Report の定義 をロードおよびレンダリングすることができます。 複数のデータソース FlexReport 定義は、それぞれが一意の名前で識別される複数のデータソースを持つことができます。レポートに複数のデータソースが含まれる場合 は、データソースの 1 つがレポートのメインデータソースになります。他のデータソースから取得した値は、レポートパラメータを追加したり、チャート フィールドを作成するために使用できます。詳細については、「FlexReport のデータソース」を参照してください。 データソートの強化 FlexReport は、データソースソート機能が強化されています。DataSource.SortDefinitions プロパティを使用して、データに対していくつかのソート式 を定義し、ソートの条件と方向を指定できます。 さらに、データのソートとグループ化は独立しています。つまり、レコードのセットにグループ化を適用し、同時にソートを使用してレコードの順序を制御 できます。単純な例として、データを都市でソートし、同時に国別にグループ化できます。これにより、Crystal Report との互換性が向上します。詳細に ついては、「データのソート」を参照してください。 データフィルタの強化 FlexReport は、データフィルタ機能が強化されており、これを通常の VBScript(C1Report や FlexReport の他のすべての式も同様)や DataView(デー タをフィルタ処理するための条件を指定するいくつかの式)の中で指定できます。FlexReport でデータをフィルタ処理するための構文タイプを指定する には、FilterExpressionSyntax 列挙を DataView(デフォルト)または VBScript に設定します。 一方、C1Report のフィルタ処理は、C1Report.Filter プロパティによって指定され、これには DataView.Filter プロパティの制限された構文が使用さ れます。これらの事情にもかかわらず、FlexReport のフィルタ処理は、C1Report のフィルタ処理と完全に互換性があります。詳細については、「データ のフィルタ処理」を参照してください。 7 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms データソースの計算フィールド FlexReport では、データソースが計算フィールドをサポートしています。つまり、データソースで計算フィールドを定義して、計算されたデータをフェッチ できます。計算フィールドの式は、DataSource.CalculatedFields コレクションで VBScript 式を使用して指定します。これらの式で、他のデータソース フィールド、レポートパラメータなどを使用できます。詳細については、「計算フィールドの定義」を参照してください。 レポートパラメータ レポート内のレポートパラメータは、データのデフォルト値を変更して、レポートのレンダリング時にこれらの値を更新するために使用されます。 FlexReport では、C1FlexReport.Parameters コレクションでレポートパラメータを定義し、さらにいくつかのプロパティを使用します。Parameters コレク ションの各要素は ReportParameter クラスのインスタンスです。詳細については、「パラメータの追加」を参照してください。 C1Report では、DataSource.RecordSource または DataSource のいずれかでパラメータを指定できます。次のように、接続文字列で PARAMETERS "キーワード" を使用します。 C1Report.DataSource.RecordSource = “PARAMETERS param1 int 0; select * from Customers where id < param1”. C1Report レポート定義が FlexReport にロードされると、DataSource.RecordSource および DataSource.Filter を使用して指定されたパラメータが C1FlexReport.Parameters コレクションに正しくインポートされます。 複数のサブセクション C1FlexReport では、各セクションに少なくとも 1 つのサブセクションが含まれます。セクションと同様に、サブセクションにもいくつかのレポートフィールド が含まれます。サブセクションを追加する利点は、親セクションにあるデータを補完できることです。サブセクションには、Section.SubSections コレク ションプロパティを使用してアクセスできます。詳細については、「複数のサブセクションの追加」を参照してください。 ビジュアルプロパティ 境界線 FlexReport では、VisualReportObject.Border プロパティを使用して、フィールド、サブセクション、およびセクションに境界線を指定できます。 また、境界線の各辺に独自のスタイルを設定し、各角にはさまざまな半径の丸みを設定できます。詳細については、「境界線」を参照してくださ い。 C1Report では、境界線はフィールドに対してのみ定義できます。 背景 FlexReport では、フィールド、サブセクション、およびセクションに背景を指定できます。背景色は、VisualReportObject.Background プロパ ティを使用して、単色またはグラデーションを設定できます。詳細については、「背景 背景」を参照してください。 C1Report では、フィールドやセクションの背景色を設定するために BackColor プロパティが使用されます。 C1Report から FlexReport への重要な変更点 FlexReport のコードはゼロから作成されています。したがって、C1Report から FlexReport への API の移行には、次のように重要な変更点が 含まれています。 C1Report では、DataSource.RecordSource 内でしかパラメータを直接指定できません(SQL 文の直前のキーワード PARAMETERS の 後)。 FlexReport では、レポートレベルの専用コレクション C1FlexReport.Parameters が別途用意されています。このコレクションで、レポー トパラメータを指定できます。.xml ファイルから C1Report レポート定義をインポートすると、PARAMETERS キーワードを使用して従来の 方法で指定されたパラメータは、C1FlexReport.Parameters コレクションに自動的に追加されます。 FlexReport では、データソースが開かれた後に OnOpen スクリプトが実行されます。したがって、そのスクリプトでメインデータソースに 行われた変更は、レポートに影響しません。レポートを生成する前にデータソースの一部を変更するには、GlobalScripts を使用しま す。GlobalScripts には、関数定義、プロシージャ定義、およびこれらの定義内にないコードを含めることができます。これらの定義とコー ドは、レポートのレンダリングが開始されてデータソースが開かれる前に、すべて実行されるようになりました。 C1Report では、Field から派生されたカスタムフィールドは、GetRenderContent() メソッドをオーバーライドします。C1FlexReport で は、このメソッドのシグネチャが次のように変更されました。 public virtual void GetDesignerRenderContent( ref string text, ref Image image, ref bool disposeImage); このオーバーライドメソッドの disposeImage を true に設定すると、画像の使用後に、C1FlexReport がその画像に対して Dispose() を 呼び出します。 C1Report.OutlineRootLevel プロパティは削除されています。アウトライン構造を制御するには、OutlineLabel プロパティと 8 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms OutlineParent プロパティを使用します。サブレポートによって生成されたアウトラインをオフにするに は、SubreportField.OutlinesVisible プロパティを使用します。 C1Report には、テキストを生成/レイアウトするためのメソッドが 2 つあり(デフォルトおよび「gdi+」)、それらは少し異なっています( C1Report.UseGdiPlusTextRendering を true に設定した場合は非デフォルト)。これらのメソッドは、多少異なるテキストレイアウトを 行う場合があります(改行が異なる場所に配置されるなど)。FlexReport は常に、UseGdiPlusTextRendering が設定された C1Report と 同様にテキストを生成/レイアウトします。ただし、それでも、UseGdiPlusTextRendering が設定された C1Report と FlexReport の間では 改行に違いが発生する場合があります。 AddOutlineEntry イベントは削除されています。フィールド/セクション/サブセクションによって生成されるアウトラインエントリのテキスト を変更するには、OutlineLabel プロパティを使用します。 C1FlexReport.ReportError イベントのために特殊な新しいイベントタイプ(ReportErrorEventArgs イベント引数を受け取る ReportErrorEventHandler)が追加されました。ReportEventArgs タイプが変更されました。イベント引数から Exception と Handled が削除されました。 レポートにマップカスタムフィールドが含まれる場合は、レポートを同期して生成する必要があります(RenderAsync() ではなく Render() を呼び出す)。そうしないと、C1FlexViewer コントロールにマップフィールドが表示されませ ん。C1FlexViewer.UseAsyncRendering プロパティを False に設定する必要があります。 C1Report では、エラーが発生した場合、EndReport イベントが呼び出されません。FlexReport では、レンダリング中に致命的エラーが 発生した場合でも、EndReport イベントが呼び出されます。 次の C1Report メソッド/プロパティは、C1FlexReport から削除されました。 C1Report.Document.Generate() C1Report.Document.Export() C1Report.Document.CreationDpi C1Report.DocumentInternal C1Report.Document.DoEvents C1Report.Document.HasEditableTags C1Report.CreationDevice StartReport()、StartSection()、EndSection()、RenderField() C1Report.DataSource.DataObject:C1FlexReport では、DataSource.Recordset プロパティから同じプロパティにアクセスでき ます。 C1Report.EmfType:C1FlexReport では、代わりに EMF+ を使用します。 C1Report.GetReportInfo():C1FlexReport では、代わりに C1FlexReport.ReportInfo を使用します。 C1Report.PageRenderingMode:C1FlexReport では、C1FlexReport.GetPageImage を使用してページのメタファイルを取得し ます。 C1FlexReport では、コードビハインドで C1Report Render<X> メソッドにアクセスできません。これらのメソッドは内部的に使用されま す。 次のコードでは、C1Report Render<X> オブジェクトを使用できません。 c1Report1.Document.Body.Children.Add(RenderGraphic obj) このメソッドは、FlexReport ではサポートされていません。 C1FlexReport.Document は System.Drawing.Printing.PrintDocument に変換できません。PrintDocument の C1Report.Document プロパティは存在しないため、FlexReport で PrintDocument を使用してはなりません。 FlexReport では、IC1FlexReportRecordset に ApplyFilter() メソッドと ApplySort() メソッドがありません。代わりに、FlexReport の DataSource にあるフィルタ定義とソート定義を使用してください。IC1FlexReportRecordset を DataSource.Recordset に割り当てても、 DataSource でフィルタ/ソートを定義できます。 FlexReport では、C1Report の FieldBase オブジェクトを使用できなくなりました。 C1FlexReport では、フィールドは「レガシー」タイプです。特殊なタイプは、C1FlexReport の FieldBase から派生されるようになりました。 次のフィールドオブジェクトは、コードビハインドで直接作成する必要があります。 TextField text = new TextField(); BarCodeField barcode = new BarCodeField(); SubreportField subreport = new SubreportField(); ChartField chart = new ChartField(); RTFField rtf=new RTFField(); CheckBoxField checkbox = new CheckBoxField(); CalculatedField calField=new CalculatedField(); 9 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ImageField img = new ImageField(); ShapeField shape = new ShapeField(); 対応するプロパティは、C1Report FieldBase オブジェクトの設定に使用されるプロパティと同じプロパティを使用します。 C1FlexReport では、C1Report の CanGrow プロパティと CanShrink プロパティの名前が変更されました。代わり に、C1FlexReport.AutoHeight、C1FlexReport.AutoWidth、および C1FlexReport.AutoSizeBehavior を使用します。 CanGrow=True および CanShrink=True は、C1FlexReport.AutoSizeBehavior.GrowAndShrink として使用できます。 FlexReport では、AddScriptObject イベントの代わりに、GetScriptObject イベントがあります。したがって、次のコードは private void c1flxr_StartReport(object sender, System.EventArgs e) { c1flxr.AddScriptObject("LookUp", new LookUpObject()); } 次のように変更します。 c1flxr.GetScriptObject += c1flxr_GetScriptObject; ... void c1flxr_GetScriptObject(object sender, C1.Win.FlexReport.ReportGetScriptObjectEventArgs e) { if (e.Name.ToLower() == "lookup") e.Object = new LookUpObject(); } レポートテンプレートが変更されない場合、C1FlexReport は、レンダリングされたコンテンツをキャッシュし、レポートを再生成しません。 レポートを必ず再生成するには、C1FlexReport.SetDirty() メソッドを呼び出します。 10 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 主要な機能 FlexReport for WinForms の主要な機能は次のとおりです。 軽量、高速 FlexReport は、特に小さなレポートで軽量かつ高速です。FlexReport は C1Report と比べて 2 倍高速にレンダリング されます。また、PDF、HTML などの主要なエクスポートは C1Report より大幅に高速化されています。 高品質なレンダリング FlexReport は、DirectWrite/Direct2D を使用することで、プリンタや画面などの測定コンテキストに依存しない、高パ フォーマンスで高品質なレポートコンテンツを描画および生成できます。 1 つのビューアですべてのドキュメントタイプを表示 FlexViewer は、FlexReport の 2015 v3 で導入された新しいコント ロールです。このコントロールを使用して、C1Report、C1FlexReport、SSRS、C1Document などの複数のドキュメントタ イプを表示することができます。パラメータの使用/リセット、レポートレンダリングをリフレッシュおよびキャンセルするオ プション、レポート内のさまざまな場所にジャンプするためのブックマークなどの機能が提供されています。 より正確な Crystal Report の移行 FlexReport は、Crystal Reports との互換性を向上させる機能を備えています。以下の機能に関して適切な移行がサ ポートされています。 サブセクション 複雑な式 指定された順序でのグループ化 強化された境界線スタイル 詳細については、「Crystal Reports のインポート」を参照してください。 モダン UI レポート設計アプリケーション(FlexReportDesigner)とプレビューツール(FlexViewer)はリボンベースの UI インタ フェースを備えており、デザイナやビューアのオプションがアクセスしやすく配置されて、直感的でリッチなユーザー使 用環境が提供されています。 リッチなユーザー使用環境を備えた新しいデザイナアプリケーション FlexReportDesigner アプリケーションには、レポート設計を従来より格段に容易にする機能が追加されています。次の 新機能があります。 コントロールからの距離を表示および配置するスナップライン。 折りたたみ/展開が可能なセクションとサブセクション。 オプションでセクションとサブセクションのヘッダーストリップを表示するためのキャプション表示設定。 設計時にチャートフィールドのプロパティ、データソース、視覚効果を設定するためのチャートエディタ。 データソース、パラメータ、ソート式、計算フィールドを追加、編集、削除するためのデータタブ。 コンテキストメニューの[式の編集]を使用して式を編集する機能。 デザイナで[標準の配置]ボタンを使用して、数値を左詰め、その他の値を右詰めに揃える機能。 詳細については、「FlexReportDesigner について」を参照してください。 新しいさまざまなチャート FlexReport では 70 種類以上のチャートタイプが提供されており、そこから自由に選択できます。FlexReportDesigner アプリケーションの設計時エディタを使用して、チャートへのデータの連結、プロパティの設定、視覚効果の追加、その 他関連タスクを容易に実行できます。 SQLiteデータベースへのサポートの追加 他のデータベースと同様に、SQLiteへの接続をFlexReportDesignerにて指定してデータを取得することが可能です。 そのために、 <br />SQLiteのADO.NETプロバイダがシステムにインストールされている必要があります。 詳細につ いては、「https://system.data.sqlite.org」をご参考ください。 11 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport の詳細情報 FlexReport の使用を開始する前に、FlexReport に付属しているコンポーネントとコントロール、FlexReport のオブジェクトモデ ル、FlexReport で使用できるセクションまたはテーブル領域について理解しておく必要があります。以下のセクションでは、こ れらに関する詳細な情報を提供します。 コンポーネントとコントロール FlexReport for WinForms は、以下のアセンブリで構成されています。 C1.Win.FlexReport dll 以下のコンポーネントを通して、すべてのレポートレンダリング機能とドキュメント生成機能を提供します。 C1FlexReport: C1FlexReport コンポーネントは、水平区切りデータベースレポートを生成するレポート生成コンポーネントです。レ ポートを直接プリンタまたはプレビューコントロールにレンダリングすることも、さまざまな移植可能な形式(XLS、PDF、 HTML、テキスト、画像など)にエクスポートすることもできます。FlexReport コンポーネントは、レポート定義を作成、カ スタマイズ、ロード、および保存するための機能豊富なオブジェクトモデルも公開しています。 C1.Win.FlexViewer dll 以下のコントロールまたはコンポーネントを通して、すべての表示機能を提供します。 C1FlexViewer: C1FlexViewerコントロールは、複数ドキュメントプレビューコントロールです。リボンベースの UI を備えており、すべて のプレビュー関連オプション(ビューアペインおよびステータスバー)に簡単にアクセスできます。 C1FlexViewerPane: C1FlexViewerPane コントロールは、プレビュー中のドキュメントのページを表示し、パン、ズームなどのプレビュー操 作を処理できます。フォームデザイナでは、コンテキストメニュー項目を使用して、現在のフォーム内に標準のツール バーとステータスバーを作成できます。 C1FlexViewerDialog: C1FlexViewerDialog は、ネストされた C1FlexViewer コントロールを使用して表示されるフォームです。 含まれるアプリケーション レポート作成用のコンポーネントとコントロールに加えて、FlexReport には以下のスタンドアロンアプリケーションも含まれま す。 C1FlexReportDesigner exe C1FlexReport レポート定義ファイルを作成および編集するための組み込みアプリケーションです。このデザイナを使用 して、C1FlexReport コンポーネントで読み込めるファイル(XML)を作成、編集、ロード、および保存できます。 オブジェクトモデルの概要 C1FlexReport は優れたオブジェクトモデルを備え、その大部分は Microsoft Access モデルに基づいています。これらのオブジェクト、コレクション、関連するプロパティやメソッドなどにより、FlexReport を柔軟かつ容易に 生成することが可能です。次の表に、オブジェクトおよびそのプロパティとメソッドを一覧します。 C1FlexReport オブジェクト ReportName、Load、GetReportList、Save、Clear、Render、Parameters、Document、DoEvents、Cancel、Page、MaxPages、Font、OnOpen、OnClose、OnNoData、OnPage、OnError、Evaluate、Execute Layout オブジェクト Width、MarginLeft、MarginTop、MarginRight、MarginBottom、PaperSize、Orientation、Columns、ColumnLayout、PageHeader、PageFooter DataSource オブジェクト CalculatedFields、ConnectionString、Filter、RecordSource、SortDefinitions DataSourceCollection Report、Add、RemoveAt SortDefinition オブジェクト Direction、Expression SortDefinitionCollection Owner、Report 12 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms CalculatedField オブジェクト DataSource、Expression、Type CalculatedFieldCollection Owner、Report グループ GroupBy、KeepTogether、SectionHeader、SectionFooter、Sort、SortExpression GroupCollection Add、Clear、RemoveAt、Report ReportParameter オブジェクト AllowedValuesDefinition、DisplayText、ParentReport、SetName ReportParameterCollection InsertItem、RemoveItem、SetItem、Report AllowedValuesDefinition オブジェクト AssignFrom、Binding、Values Section オブジェクト Calculated、Fields、Height、KeepTogether、SplitBehavior、SubSections SectionCollection Detail、Footer、Header、PageFooter、PageHeader SubSection オブジェクト Calculated、Fields、Height、ParentReport、ParentSection、SplitBehavior、Visible SubSectionCollection Add、Remove、RemoveAt、Report FieldBase オブジェクト Anchor、Height、KeepTogether、ForcePageBreak、MarginBottom、MarginLeft、MarginRight、MarginTop、Section、SplitHorzBehavior、SplitVertBehavior FieldCollection Add、Remove、RemoveAt BarCodeField オブジェクト BarCode、BarCodeOptions、Font、Text CheckBoxField オブジェクト CheckAlign、CheckMark、Text、ThreeState、Value DataField オブジェクト Calculated、Name、Type、Value ImageField オブジェクト AssignFrom、PictureAlign、PictureScale RtfField オブジェクト AssignFrom、DetectUrls、Text ShapeField オブジェクト Line、Shape、ShapeBackColor、ShapeBackground、ShapeType SubreportField オブジェクト ParameterValues、Subreport、SubreportFilter TextField オブジェクト Format、Text ExportFilter オブジェクト ExportFilter GraphicsFilter オブジェクト GraphicsFilter HtmlFilter オブジェクト ExportProvider、Paged PdfFilter オブジェクト EmbedFonts、ExportProvider、UseOutlines、PdfACompatible、PdfSecurityOptions RtfFilter オブジェクト ExportProvider、OpenXml、Paged XlsFilter オブジェクト ExportProvider、OpenXml、PictureLayer、SheetName、Tolerance VisualReportObject Background、Border、BordersSplitHorzMode、BordersSplitVertMode、OutlineLabel BehaviorOptions AssignFrom、Reset、IgnoreInvisibleFieldsInGrowShrinkSections 13 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport のセクション すべてのレポートは、次の 5 つの基本セクションで構成されます。 セクション 説明 詳細 詳細セクションには、ソースレコードセット内の各レコードごとに一度ずつレンダリングされるフィール ドが含まれます。 ヘッダー レポートのヘッダーセクションは、レポートの最初にレンダリングされます。 フッター レポートのフッターセクションは、レポートの最後にレンダリングされます。 ページヘッダー ページヘッダーセクションは、各ページの上部にレンダリングされます(オプションで、レポートヘッ ダーを含むページを除外することもできます)。 ページフッター ページフッターセクションは、各ページの下部にレンダリングされます。 さらに、グループごとに、グループヘッダー グループヘッダーとグループフッター グループフッターという 2 つの追加セクションがあります。たとえば、3 つのグルー プレベルを持つレポートには 11 のセクションがあることになります。 サブセクション サブセクションという追加セクションをレポートの任意のセクションに追加することもできます。 これらのセクションを非表示にすることはできますが、グループを追加または削除しない限り、セクションを追加または削 除することはできません。 次の図に、一般的なレポートで各セクションがどのようにレンダリングされるかを示します。図では、詳細セクションに置かれた サブセクションがレポートでどのようにレンダリングされるかも示しています。 レポートヘッダー 最初にレンダリングされるセクションは、レポートヘッダーです。このセクションには、通常、レポートを識別する情報が含まれま す。 ページヘッダー レポートヘッダーの次に、ページヘッダーがレンダリングされます。レポート内にグループがない場合、このセクションには、通 常、詳細セクション内のフィールドについて説明するラベルが含まれます。 14 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms グループヘッダーとグループフッター 次に、グループヘッダー、詳細、グループフッターの各セクションがレンダリングされます。これらが、実際のレポートデータを含 むセクションです。グループヘッダーとグループフッターには、多くの場合、グループの合計、パーセント値、最大値、最小値な どの集計関数が含まれます。グループヘッダーとグループフッターは、GroupBy プロパティによって指定された式の値が、あ るレコードから次のレコードへ変わるたびに挿入されます。 詳細 詳細セクションには、各レコードのデータが含まれます。Visible プロパティを False に設定してこのセクションを非表示にし、グ ループヘッダーとグループフッターだけを表示することもできます。これは、サマリーレポートの作成に便利な方法です。 ページフッター 各ページの下部には、ページフッターセクションがレンダリングされます。このセクションには、通常、ページ番号、レポートの総 ページ数、レポートの印刷日などの情報が含まれます。 レポートフッター 最後に、レポートフッターセクションが最後のページフッターの前に出力されます。このセクションは、多くの場合、レポート全体 に関するサマリー情報を表示するために使用されます。 サブセクション サブセクションは、レポートの任意のセクションに追加できます。デフォルトでは、現在選択されているセクションの下部に追加 されます。このセクションには、親セクションにあるデータを補完する付加的なデータが含まれます。セクションの高さは、サブ セクションの高さの合計によって決まります。 カスタムセクション セクションを表示するかどうかは、Visible プロパティを True または False に設定することで決定できます。グループヘッダー は、Repeat プロパティを True に設定することで、(ページがグループの最初のページかどうかにかかわらず)各ページの上 部に繰り返し表示できます。ページヘッダーとページフッターは、Layout オブジェクトの PageHeader プロパティと PageFooter プロパティを設定することで、レポートヘッダーおよびレポートフッターセクションを含むページから削除できます。 15 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport クイックスタート C1FlexReport は、デスクトップ上のさまざまな状況で使用できますが、どの場合でも主な手順は同じです。 1. レポート定義を作成する レポート定義は、FlexReportDesigner アプリケーションを使用して直接作成するか、Microsoft Access のレポートデ ザイナや Crystal Report を使用して作成した後で、FlexReportDesigner にインポートできます。コードを使用して作 成することもできます。この場合は、オブジェクトモデルを使用してグループおよびフィールドを追加するか、カスタム XML ファイルを記述します。 2. C1FlexReport コンポーネントにレポートをロードする レポートをロードするには、設計時に[レポートのロード] [レポートのロード]コンテキストメニューを使用するか、プログラムで C1FlexReport.Load メソッドを使用します。設計時にレポートをロードした場合、レポートはコントロールに保持(保存) されるため、レポート定義ファイルを配布する必要はありません。 3. レポートをレンダリングする レポートは、C1FlexViewer.DocumentSource プロパティを使用して FlexViewer コントロールにレンダリングできま す。プレビューコントロールによってレポートが画面に表示され、ユーザーは、全画面表示やパンなどの機能を使用し てレポートをプレビューできます。レポートのレンダリングは、デスクトップアプリケーションでのみサポートされます。 以下の手順は、レポート定義を作成し、レポートを C1FlexReport コンポーネントにロードし、レポートをレンダリングする方法を 示します。 手順 1:レポート定義の作成 :レポート定義の作成 次のトピックでは、FlexReportDesigner アプリケーションとコード コードを使用してレポート定義を作成する方法について説明します。レポート定義の作成は、レポートのレンダリン グとは異なることに注意してください。レポートのレンダリングは、既存のレポート定義をロードし、C1FlexReport.Render メソッドを呼び出すだけで行うことができます。レ ポート定義を作成する最も簡単な方法は、C1FlexReportDesigner を使用することです。これは、Microsoft Access のレポートデザイナや Crystal Report に似たスタンドア ロンアプリケーションです。 FlexReportDesigner を使用したレポート定義の作成 C1FlexReport ウィザード ウィザードは、新しいレポートの作成手順を最初から最後までガイドします。次の手順に従います。 1. まず、.NET プロジェクトを作成し、C1FlexReport コンポーネントをツールボックスに追加します。 2. ツールボックスで、C1FlexReport アイコンをダブルクリックして、このコンポーネントをプロジェクトに追加します。コンポーネントは、コンポーネントトレイ内でフォーム の下に表示されます。 3. C1FlexReport コンポーネントのスマートタグをクリックし、そのタスク タスクメニューから[レポートの編集] [レポートの編集]を選択します。 C1FlexReportDesigner が開き、C1FlexReport ウィザード ウィザードによる 5 つの簡単な手順のガイドが開始されます。 C1FlexReport ウィザード ウィザードで、次の 5 つの手順を実行してレポートを作成します。 1. 新しいレポートのデータソースを選択します。 このページを使用して、レポートデータの取得に使用される DataSource.ConnectionString と DataSource.RecordSource を選択します。 DataSource.ConnectionString は、次の 3 つの方法で指定できます。 文字列をエディタに直接入力します。 ドロップダウンリストを使用して、最近使用した接続文字列を選択します(デザイナには、最近使用された接続文字列が 8 個まで保持されます)。 省略符 省略符((...))ボタンをクリックして、標準の接続文字列ビルダを起動します。 DataSource.RecordSource の文字列は、次の 2 つの方法で指定できます。 [テーブル] [テーブル]オプションをクリックし、リストからテーブルを選択します。 [SQL]]オプションをクリックし、エディタに SQL 文を入力(または貼り付け)します。 手順 1 の実行 16 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の手順を実行します。 1. 2. 3. 4. 省略符 省略符ボタンをクリックして、標準の接続文字列ビルダを起動します。[データリンクプロパティ] [データリンクプロパティ]ダイアログボックスが開きます。 [プロバイダ] [プロバイダ]タブを選択し、リストからデータプロバイダを選択します。この例では、Microsoft Jet 4.0 OLE DB Provider を選択します。 [次へ] [次へ]ボタンをクリックするか、[接続] [接続]タブを選択します。ここで、データソースを選択する必要があります。 省略符 省略符ボタンをクリックしてデータベースを選択します。[[Access データベースの選択] データベースの選択]ダイアログボックスが表示されます。この例では、(デフォルトでは Documents フォルダにインストールされる)ComponentOne Samples ディレクトリの Common フォルダにある C1NWind.mdb を選択します。このディレク トリはデフォルトのインストールパスに基づいていますが、インストールパスを変更した場合は、パスが異なる場合があります。 5. [開く] [開く]をクリックします。接続をテストし、[[OK]]をクリックします。 6. [OK]]をクリックして、[データリンクプロパティ] [データリンクプロパティ]ダイアログボックスを閉じます。 7. データソースを選択したら、テーブル、ビュー、またはストアドプロシージャを選択して実際のデータを提供できます。DataSource.RecordSource の文字列 は、次の 2 つの方法で指定できます。 [データソース] [データソース]タブを選択し、[テーブル] [テーブル]リストから Products テーブルを選択します。 [SQL]]タブを選択し、エディタに SQL 文を入力(または貼り付け)します。 次に例を示します。 select * from products 8. [次へ] [次へ]をクリックします。ウィザードに従って残りの手順を実行します。 2. レポートに含めるフィールドを選択します。 このページには、手順 1 で選択したレコードセットにあるフィールドのリスト、およびレポートのグループフィールドと詳細フィールドを定義する 2 つのリストが表示され ます。グループフィールドはデータのソート方法と集計方法を定義し、詳細フィールドはレポートに表示する情報を定義します。 マウスポインタを使用してドラッグすることで、リスト間でフィールドを移動することができます。フィールドを[詳細] [詳細]リストにドラッグしてレポートに入れたり、リスト内で フィールドをドラッグして順序を変更することができます。レポートからフィールドを削除する場合は、フィールドをドラッグして[利用可能なフィールド] [利用可能なフィールド]リストに戻します。 手順 2 の実行 次の手順を実行します。 1. マウスポインタを使用して CategoryID フィールドを選択し、[グループ] [グループ]リストにドラッグします。 2. [>>]ボタンをクリックして、残りのフィールドを[詳細] [詳細]リストに移動します。 17 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 3. [次へ] [次へ]をクリックします。ウィザードに従って残りの手順を実行します。 3. 新しいレポートのレイアウトを選択します。 このページには、ページ内でのデータの構成方法を定義するいくつかのオプションが用意されています。レイアウトを選択すると、左側にサムネイルプレビューが表示 され、ページ内でレイアウトがどのように表示されるかを確認できます。2 つのレイアウトグループがあります。1 つは、グループなしのレポート用のレイアウトグルー プ、もう 1 つはグループありのレポート用のレイアウトとグループです。目的とするレポートの最終的な外観に最も近いレイアウトを選択してください。 また、このページでは、用紙の方向と、フィールドをページ幅に合わせて調整するかどうかを選択できます。 [ラベル] [ラベル]レイアウトオプションを使用して、Avery スタイルのラベルを印刷します。このオプションを選択すると、印刷するラベルの種類を指定するためのページが表示 されます。 手順 3 の実行 次の手順を実行します。 1. [アウトライン] [アウトライン]レイアウトのままにします。 2. [次へ] [次へ]をクリックします。ウィザードに従って残りの手順を実行します。 4. 新しいレポートのスタイルを選択します。 このページでは、新しいレポートで使用するフォントと色を選択できます。前のページと同様に、プレビューが表示され、各スタイルがどのように表示されるかを確認で きます。最適なスタイルを選択します(スタイルは後で変更したり、詳細に調整することができます)。 18 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 手順 4 の実行 1. Verdana スタイルを選択します。 2. [次へ] [次へ]をクリックします。ウィザードに従って残りの手順を実行します。 5. 新しいレポートのタイトルを選択します。 この最後の手順のページでは、新しいページのタイトルを選択します。また、新しいレポートをすぐにプレビューするか、プレビューする前に編集モードに移動してデザ インに手を加えるかを指定します。 手順 5 の実行 1. 新しいレポートのタイトルを入力します。たとえば、「Products Report」とします。 2. [レポートのプレビュー] [レポートのプレビュー]を選択し、[完了] [完了]をクリックします。 デザイナ デザイナのプレビューペインにレポートが直ちに表示されます。 レポートに何らかの調整が必要なことに気づくことがあります。レポートの修正方法については、次の手順で説明します。 コードを使用したレポート定義の作成 以下の手順では、FlexReportDesigner アプリケーションまたはコードを使用してレポート定義を作成する方法について説明します。独自のレポートデザイナを記述したり、ア ドホックなレポートジェネレータを作成することもできます。 19 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms この例では、コードを使用して、C1NWind データベースに基づく単純な表形式のレポート定義を作成します。コードにはコメントが付けられ、C1FlexReport オブジェクトモデル の最も重要な要素が例示されています。次の手順を実行します。 1. 最初に、ボタンコントロール、C1FlexReport コンポーネント、および C1FlexViewer コントロールをフォームに追加します。次のプロパティを設定します。 Button.Name = btnEmployees C1FlexReport.Name = c1FlexReport1 (C# でのデフォルト名) C1FlexViewer.Name = c1FlexViewer1 (C# でのデフォルト名) 2. c1FlexReport1 という名前のコントロールを初期化します。それには、Clear メソッドを使用してコンテンツを消去し、コントロールのフォントを設定します(このフォントが 新しいフィールドに割り当てられます)。 Visual Basic Private Sub RenderEmployees() C1FlexReport1.DataSource.RecordSourceType = RecordSourceType.Auto ' 既存のフィールドをすべて消去します C1FlexReport1.Clear() ' すべてのコントロールのデフォルトのフォントを設定します C1FlexReport1.Font.Name = "Tahoma" C1FlexReport1.Font.Size = 8 End Sub C# private void RenderEmployees() { c1FlexReport1.DataSource.RecordSourceType = RecordSourceType.Auto; // 既存のフィールドをすべて消去します c1FlexReport1.Clear(); // すべてのコントロールのデフォルトのフォントを設定します c1FlexReport1.Font.Name = "Tahoma"; c1FlexReport1.Font.Size = 8; } 3. 次に、C1NWind.mdb データベースから必要なデータを取得するように DataSource オブジェクトを設定します。それには、ConnectionString プロパティと RecordSource プロパティを使用します。 Visual Basic ' DataSource を初期化します Dim ds As DataSource = C1FlexReport1.DataSource ds.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\ComponentOne Samples\Common\C1NWind.mdb;" ds.RecordSource = "Employees" C# //DataSource を初期化します DataSource ds = c1FlexReport1.DataSource; ds.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\...\ComponentOne Samples\Common\C1NWind.mdb;"; ds.RecordSource = "Employees"; 4. 次に、ページ内のレポートのレイアウト方法を定義する Layout オブジェクトを初期化します。ここでは、レポートを Portrait(縦)モードでレンダリングし、Width を 6.5 インチ(ページ幅 8.5 インチから、両側のマージン各 1 インチを引いた値)に設定します。 Visual Basic 'Layout を初期化します Dim l As Layout = C1FlexReport1.Layout l.Orientation = OrientationEnum.Portrait l.Width = 6.5 * 1440 ' 8.5 からマージンを引いた値(ツイップ単位) C# //Layout を初期化します Layout l = c1FlexReport1.Layout; l.Orientation = OrientationEnum.Portrait; l.Width = 6.5 * 1440; // 8.5 からマージンを引いた値(ツイップ単位) 5. 次の手順は、興味深いものです。すべてのレポートには、5 つの基本セクション(詳細 詳細、レポートヘッダー レポートヘッダー、レポートフッター レポートフッター、ページヘッダー ページヘッダー、ページフッター ページフッター)がありま す。次のコードを使用して、レポートヘッダーを設定します。ここでは、いくつかのプロパティを設定し、タイトルフィールドを追加します。 Visual Basic 20 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ' レポートヘッダーを作成します Dim s As Section = C1FlexReport1.Sections(SectionTypeEnum.Header) s.Height = 1440 s.Visible = True s.BackColor = Color.FromArgb(200, 200, 200) Dim textFld1 As New TextField() textFld1.Name = "FldTitle" textFld1.Text = "Employees Report" textFld1.Left = 0 textFld1.Top = 0 textFld1.Width = 8000 textFld1.Height = 1440 textFld1.Font.Size = 24 textFld1.Font.Bold = True textFld1.ForeColor = Color.FromArgb(0, 0, 100) C1FlexReport1.Sections.Header.Fields.Add(textFld1) C# // レポートヘッダーを作成します Section s = c1FlexReport1.Sections[SectionTypeEnum.Header]; s.Height = 1440; s.Visible = true; s.BackColor = Color.FromArgb(200, 200, 200); TextField textFld1 = new TextField(); textFld1.Name = "FldTitle"; textFld1.Text= "Employees Report"; textFld1.Left = 0; textFld1.Top = 0; textFld1.Width = 8000; textFld1.Height = 1440; textFld1.Font.Size = 24; textFld1.Font.Bold = true; textFld1.ForeColor = Color.FromArgb(0, 0, 100); c1FlexReport1.Sections.Header.Fields.Add(textFld1); 上記のセクションオブジェクトには、Fields コレクションがあります。このコレクションの Add メソッドは、新しいフィールドを作成し、それをセクションに割り当てます。パ ラメータで、新しいフィールドの Name、Text、Left、Top、Width、Height の各プロパティを指定しています。デフォルトでは、フィールドのフォントはコントロールと同じ です。このフィールドはタイトルなので、フォントを変更してサイズを大きくしています。フォントサイズに合わせてフィールドの高さを十分大きくしてください。そうしない と、何も表示されなくなります。 6. 次に、ページフッターセクションを設定します。このセクションは、テキストフィールドに式が含まれており、さらに興味深くなっています。テキストフィールド内の式を評価 するには、TextField.Text.Expression プロパティに式を設定するだけです。テキストフィールド内の式は、レポートのレンダリング時に評価されます。C1Report で は、フィールドの Calculated プロパティを True に設定することで、同じことを実現できます。ページフッターを作成するには、次のコードを追加します。 VB ' ページフッターを作成します s = C1FlexReport1.Sections(SectionTypeEnum.PageFooter) s.Height = 500 s.Visible = True Dim textFld2 As New TextField() textFld2.Name = "FldFtrLeft" textFld2.Text.Expression = """Employees: Printed on "" & Now" textFld2.Left = 0 textFld2.Top = 0 textFld2.Width = 4000 textFld2.Height = 300 textFld2.Font.Size = 8 textFld2.Font.Bold = False C1FlexReport1.Sections.PageFooter.Fields.Add(textFld2) Dim textFld3 As New TextField() textFld3.Name = "FldFtrRight" textFld3.Text.Expression = """Page "" + Page + "" of "" & Pages" textFld3.Left = 4000 textFld3.Top = 0 textFld3.Width = 4000 textFld3.Height = 300 textFld3.Align = FieldAlignEnum.RightTop textFld3.Width = C1FlexReport1.Layout.Width - textFld3.Left C1FlexReport1.Sections.PageFooter.Fields.Add(textFld3) 'ページフッターの前に直線を追加します Dim shpfld As New ShapeField() 21 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms shpfld.Name = "FldLine" shpfld.ShapeType = ShapeType.Line shpfld.Left = 0 shpfld.Top = 0 shpfld.Width = C1FlexReport1.Layout.Width shpfld.Height = 20 C1FlexReport1.Sections.PageFooter.Fields.Add(shpfld) C# // ページフッターを作成します s = c1FlexReport1.Sections[SectionTypeEnum.PageFooter]; s.Height = 500; s.Visible = true; TextField textFld2 = new TextField(); textFld2.Name = "FldFtrLeft"; textFld2.Text.Expression = @"""Employees: Printed on "" & Now"; textFld2.Left = 0; textFld2.Top = 0; textFld2.Width = 4000; textFld2.Height = 300; textFld2.Font.Size = 8; textFld2.Font.Bold = false; c1FlexReport1.Sections.PageFooter.Fields.Add(textFld2); TextField textFld3 = new TextField(); textFld3.Name = "FldFtrRight"; textFld3.Text.Expression = @"""Page "" + Page + "" of "" & Pages"; textFld3.Left = 4000; textFld3.Top = 0; textFld3.Width = 4000; textFld3.Height = 300; textFld3.Align = FieldAlignEnum.RightTop; textFld3.Width = c1FlexReport1.Layout.Width - textFld3.Left; c1FlexReport1.Sections.PageFooter.Fields.Add(textFld3); //ページフッターの前に直線を追加します ShapeField shpfld = new ShapeField(); shpfld.Name = "FldLine"; shpfld.ShapeType = ShapeType.Line; shpfld.Left = 0; shpfld.Top = 0; shpfld.Width = c1FlexReport1.Layout.Width; shpfld.Height = 20; c1FlexReport1.Sections.PageFooter.Fields.Add(shpfld); このページフッターセクションの式では、VBScript 固有の変数ではなく、C1FlexReport で定義されている変数を使用しています。Page と Pages は、現在のページ番 号と総ページ数が格納される変数です。このセクションでは、直線として表示されるように設定されたフィールドも使用されています。 7. 次に、ページヘッダーセクションを設定します。このセクションは、各ページの上部にレンダリングされ、フィールドラベルが表示されます。ページヘッダーセクションを使 用してフィールドラベルを表示するテクニックは、表形式のレポートでよく使用されます。コードは単純ですが、すべてのフィールドのサイズを指定しているため、見た目 は多少煩雑です。実際のアプリケーションでは、これらの値はプログラムに組み込まれません。フィールドラベルを含むページヘッダーを作成するには、次のコードを 追加します。 Visual Basic 'フィールドラベルを含むページヘッダーを作成します s = C1FlexReport1.Sections(SectionTypeEnum.PageHeader) s.Height = 500 s.Visible = True C1FlexReport1.Font.Bold = True Dim textFld4 As New TextField() textFld4.Name = "LblID" textFld4.Text = "ID" textFld4.Left = 0 textFld4.Top = 50 textFld4.Width = 400 textFld4.Height = 300 textFld4.Align = FieldAlignEnum.RightTop C1FlexReport1.Sections.PageHeader.Fields.Add(textFld4) Dim textFld5 As New TextField() textFld5.Name = "LblFirstName" textFld5.Text = "First" textFld5.Left = 500 22 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms textFld5.Top = 50 textFld5.Width = 900 textFld5.Height = 300 C1FlexReport1.Sections.PageHeader.Fields.Add(textFld5) Dim textFld6 As New TextField() textFld6.Name = "LblLastName" textFld6.Text = "Last" textFld6.Left = 1500 textFld6.Top = 50 textFld6.Width = 900 textFld6.Height = 300 C1FlexReport1.Sections.PageHeader.Fields.Add(textFld6) Dim textFld7 As New TextField() textFld7.Name = "LblTitle" textFld7.Text = "Title" textFld7.Left = 2500 textFld7.Top = 50 textFld7.Width = 2400 textFld7.Height = 300 C1FlexReport1.Sections.PageHeader.Fields.Add(textFld7) Dim textFld8 As New TextField() textFld8.Name = "LblTitle" textFld8.Text = "Notes" textFld8.Left = 5000 textFld8.Top = 50 textFld8.Width = 8000 textFld8.Height = 300 C1FlexReport1.Sections.PageHeader.Fields.Add(textFld8) C1FlexReport1.Font.Bold = False Dim shpfld2 As New ShapeField() shpfld2.Name = "FldLine" shpfld2.ShapeType = ShapeType.Line shpfld2.Left = 0 shpfld2.Top = 400 shpfld2.Width = C1FlexReport1.Layout.Width shpfld2.Height = 20 C1FlexReport1.Sections.PageHeader.Fields.Add(shpfld2) C# //フィールドラベルを含むページヘッダーを作成します s = c1FlexReport1.Sections[SectionTypeEnum.PageHeader]; s.Height = 500; s.Visible = true; c1FlexReport1.Font.Bold = true; TextField textFld4 = new TextField(); textFld4.Name = "LblID"; textFld4.Text = "ID"; textFld4.Left = 0; textFld4.Top = 50; textFld4.Width = 400; textFld4.Height = 300; textFld4.Align = FieldAlignEnum.RightTop; c1FlexReport1.Sections.PageHeader.Fields.Add(textFld4); TextField textFld5 = new TextField(); textFld5.Name = "LblFirstName"; textFld5.Text = "First"; textFld5.Left = 500; textFld5.Top = 50; textFld5.Width = 900; textFld5.Height = 300; c1FlexReport1.Sections.PageHeader.Fields.Add(textFld5); TextField textFld6 = new TextField(); textFld6.Name = "LblLastName"; textFld6.Text = "Last"; textFld6.Left = 1500; textFld6.Top = 50; textFld6.Width = 900; textFld6.Height = 300; c1FlexReport1.Sections.PageHeader.Fields.Add(textFld6); TextField textFld7 = new TextField(); textFld7.Name = "LblTitle"; textFld7.Text = "Title"; 23 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms textFld7.Left = 2500; textFld7.Top = 50; textFld7.Width = 2400; textFld7.Height = 300; c1FlexReport1.Sections.PageHeader.Fields.Add(textFld7); TextField textFld8 = new TextField(); textFld8.Name = "LblTitle"; textFld8.Text = "Notes"; textFld8.Left = 5000; textFld8.Top = 50; textFld8.Width = 8000; textFld8.Height = 300; c1FlexReport1.Sections.PageHeader.Fields.Add(textFld8); c1FlexReport1.Font.Bold = false; ShapeField shpfld2 = new ShapeField(); shpfld2.Name = "FldLine"; shpfld2.ShapeType = ShapeType.Line; shpfld2.Left = 0; shpfld2.Top = 400; shpfld2.Width = c1FlexReport1.Layout.Width; shpfld2.Height = 20; c1FlexReport1.Sections.PageHeader.Fields.Add(shpfld2); このコードは、フォントを処理するための強力なテクニックを示しています。すべてのフィールドは、作成時にコントロールのフォントを継承するため、フィールドを作成す る前にコントロールの Font.Bold プロパティを True に設定し、後で False に戻します。これで、ページヘッダーセクション内のすべてのコントロールのフォントが太字 になります。 8. 詳細セクションを追加して、レポートを完成させます。このセクションが、実際のデータを表示するセクションです。詳細セクションでは、ページヘッダーセクションの各ラ ベルの下のテキストフィールドに式を設定します。詳細セクションを作成するには、次のコードを追加します。 Visual Basic ' 詳細セクションを作成します s = C1FlexReport1.Sections(SectionTypeEnum.Detail) s.Height = 330 s.Visible = True Dim textField As New TextField() textField.Name = "FldID" textField.Text.Expression = "EmployeeID" textField.Left = 0 textField.Top = 0 textField.Width = 400 textField.Height = 300 C1FlexReport1.Sections.Detail.Fields.Add(textField) Dim textField1 As New TextField() textField1.Name = "FldFirstName" textField1.Text.Expression = "FirstName" textField1.Left = 500 textField1.Top = 0 textField1.Width = 900 textField1.Height = 300 C1FlexReport1.Sections.Detail.Fields.Add(textField1) Dim textField2 As New TextField() textField2.Name = "FldLastName" textField2.Text.Expression = "LastName" textField2.Left = 1500 textField2.Top = 0 textField2.Width = 900 textField2.Height = 300 C1FlexReport1.Sections.Detail.Fields.Add(textField2) Dim textField3 As New TextField() textField3.Name = "FldTitle" textField3.Text.Expression = "Title" textField3.Left = 2500 textField3.Top = 0 textField3.Width = 2400 textField3.Height = 300 C1FlexReport1.Sections.Detail.Fields.Add(textField3) Dim textField4 As New TextField() textField4.Name = "FldNotes" textField4.Text.Expression = "Notes" textField4.Left = 5000 textField4.Top = 0 24 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms textField4.Width = 8000 textField4.Height = 300 C1FlexReport1.Sections.Detail.Fields.Add(textField4) textField4.Width = C1FlexReport1.Layout.Width - textField4.Left textField4.AutoHeight = AutoSizeBehavior.CanGrow textField4.Font.Size = 6 textField4.Align = FieldAlignEnum.JustTop '詳細セクションの各フィールドの後に直線を追加します Dim shpfld3 As New ShapeField() shpfld3.Name = "FldLine" shpfld3.ShapeType = ShapeType.Line shpfld3.Left = 0 shpfld3.Top = 310 shpfld3.Width = C1FlexReport1.Layout.Width shpfld3.Height = 20 C1FlexReport1.Sections.Detail.Fields.Add(shpfld3) C# // 詳細セクションを作成します s = c1FlexReport1.Sections[SectionTypeEnum.Detail]; s.Height = 330; s.Visible = true; TextField textField = new TextField(); textField.Name = "FldID"; textField.Text.Expression = "EmployeeID"; textField.Left = 0; textField.Top = 0; textField.Width = 400; textField.Height = 300; c1FlexReport1.Sections.Detail.Fields.Add(textField); TextField textField1 = new TextField(); textField1.Name = "FldFirstName"; textField1.Text.Expression = "FirstName"; textField1.Left = 500; textField1.Top = 0; textField1.Width = 900; textField1.Height = 300; c1FlexReport1.Sections.Detail.Fields.Add(textField1); TextField textField2 = new TextField(); textField2.Name = "FldLastName"; textField2.Text.Expression = "LastName"; textField2.Left = 1500; textField2.Top = 0; textField2.Width = 900; textField2.Height = 300; c1FlexReport1.Sections.Detail.Fields.Add(textField2); TextField textField3 = new TextField(); textField3.Name = "FldTitle"; textField3.Text.Expression = "Title"; textField3.Left = 2500; textField3.Top = 0; textField3.Width = 2400; textField3.Height = 300; c1FlexReport1.Sections.Detail.Fields.Add(textField3); TextField textField4 = new TextField(); textField4.Name = "FldNotes"; textField4.Text.Expression = "Notes"; textField4.Left = 5000; textField4.Top = 0; textField4.Width = 8000; textField4.Height = 300; c1FlexReport1.Sections.Detail.Fields.Add(textField4); textField4.Width = c1FlexReport1.Layout.Width - textField4.Left; textField4.AutoHeight = AutoSizeBehavior.CanGrow; textField4.Font.Size = 6; textField4.Align = FieldAlignEnum.JustTop; //詳細セクションの各フィールドの後に直線を追加します ShapeField shpfld3 = new ShapeField(); 25 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms shpfld3.Name = "FldLine"; shpfld3.ShapeType = ShapeType.Line; shpfld3.Left = 0; shpfld3.Top = 310; shpfld3.Width = c1FlexReport1.Layout.Width; shpfld3.Height = 20; c1FlexReport1.Sections.Detail.Fields.Add(shpfld3); すべてのテキストフィールドに式が含まれており、各テキストフィールドはソースレコードソース内のフィールド名に対応しています。TextField.Text.Expression プロパ ティに式を設定することで、Text プロパティは、リテラルとしてレンダリングされるのではなく、データベースのフィールド名として解釈されます。レポートのフィールド名 がレコードセットのフィールド名とは異なる一意の名前となるような命名規則を採用することが重要です。たとえば、「LastName」という名前のフィールドが 2 つあると、 「Left(LastName,1)」のような式はあいまいになります。この例では、レポートのフィールド名はすべて「Fld」で始まるという命名規則を採用しました。 「FldNotes」フィールドは、AutoHeight プロパティが CanGrow に設定され、他のフィールドより小さいフォントが設定されています。これは、データベースの「Notes」 フィールドに長いテキストが含まれていても、レポートに表示されるようにするためです。フィールドの高さを大きく設定して無駄なスペースを作るのではな く、AutoHeight プロパティを CanGrow に設定して、コンテンツに合わせて必要に応じてフィールドが拡大するようにしています。また、このフィールドを含むセクション の AutoHeight プロパティも True に設定して、フィールドがセクションからはみ出さないようにしています。 9. これで、レポート定義は完了です。レポートを C1FlexViewer コントロールにレンダリングするには、Employees ボタンをダブルクリックして、btnEmployees_Click イ ベントにイベントハンドラを追加します。コードエディタが表示され、イベントハンドラ内に挿入ポイントが配置されます。次のコードを入力します。 Visual Basic RenderEmployees() C1FlexViewer1.DocumentSource = C1FlexReport1 C# RenderEmployees(); c1FlexViewer1.DocumentSource = c1FlexReport1; 基本レポートの外観は次のようになります。 手順 2:レポートの修正 :レポートの修正 プレビューモードの FlexReportDesigner では、レポートを調整することはできません。[設計] [設計]ボタンをクリックしてデザインモードに 切り替え、修正を開始します。メインウィンドウの右ペインがプレビューモードから設計モードに切り替わり、レポートを構成するコント 26 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ロールとフィールドが表示されます。 レポートの修正 この例では、グループヘッダーセクションのサイズ変更、およびフィールド値の書式設定を行います。それには、次の手順に従いま す。 1. グループヘッダーセクションのサイズを変更するには、境界線を選択し、マウスポインタを使用して目的の位置までドラッグしま す。 2. マウスポインタでフィールドの角にあるハンドルをドラッグして、フィールドのサイズを変更します。 ヒント ヒント:テキストがフィールドに収まらない場合は、プロパティペインでフィールドの Appearance.WordWrap プロパティ を True に設定します。 3. プロパティペインで、Unit Price 列の下にある詳細セクションの UnitPriceCtl フィールドを選択します。 4. フィールドの Appearance.Format プロパティを Currency に設定します。 27 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 5. [プレビュー] [プレビュー]ボタンをクリックしてプレビューモードに切り替え、修正を確認します。 6. [設計] [設計]ボタンをクリックして、プレビューモードから設計モードに切り替えます。 7. [ファイル] [ファイル]メニューをクリックして、表示されるメニューから[名前を付けて保存] [名前を付けて保存]を選択します。 28 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 8. [レポート定義ファイルの保存] [レポート定義ファイルの保存]ダイアログボックスで、[ファイル名] [ファイル名]ボックスに「ProductsReport.flxr」と入力します。後で使 用するために、覚えやすい場所にファイルを保存します。 9. デザイナ デザイナを閉じて、Visual Studio プロジェクトに戻ります。 これで、レポート定義ファイルを作成できました。次の手順では、C1FlexReport コンポーネントにレポートをロードします。 手順 3::C1FlexReport コンポーネントでのレポートのロード 設計時にファイルからレポート定義をロードするには、次のいずれかのタスクを実行します。 C1FlexReport コンポーネントを右クリックし、[レポートのロード] [レポートのロード]メニューオプションを選択します。 または C1FlexReport コンポーネントの上のスマートタグ( )をクリックし、[[C1FlexReport のタスク] のタスク]メニューから[レポートの [レポートの 読み込み] 読み込み]を選択します。 [レポートのロード] [レポートのロード]ダイアログボックスを使用して、必要なレポートを選択するには、次のタスクを実行します。 1. 省略符 省略符ボタンをクリックします。[開く] [開く]ダイアログボックスが表示されます。 2. ProductsReport.flxr ファイルを保存した場所を参照し、そのファイルを選択して、[開く] [開く]をクリックします。 3. [レポート] [レポート]ドロップダウンボックスに有効なレポート定義がリストされます。ロードする[[Products Report]]定義を選択 します。 4. [ロード] [ロード]をクリックし、[[OK]]をクリックして、ダイアログボックスを閉じます。 29 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の手順では、レポートをプレビューコントロールにレンダリングします。 手順 4:レポートのレンダリング :レポートのレンダリング レポート定義を作成し、データソースを定義して C1FlexReport コンポーネントにロードしたら、レポートをプリンタやプレビュー コントロール C1FlexViewer にレンダリングしたり、別のファイル形式にエクスポートすることができます。 C1FlexViewer コントロールでレポートをプレビューするには、次の手順に従います。 1. 2. 3. 4. ツールボックス ツールボックスから、C1FlexViewer コントロールをダブルクリックしてプロジェクトに追加します。 プロパティウィンドウで、C1FlexViewer.Dock プロパティを Fill に設定します。 マウスで Windows フォームを選択し、ドラッグしてサイズ変更します。 フォームをダブルクリックし、Form_Load イベントハンドラに次のコードを入力します。 Visual Basic 'レポート定義をロードします C1FlexReport1.Load("..\..\Products Report.flxr", "14a: サブレポート") 'レポートをプレビュー表示します C1FlexViewer1.DocumentSource = C1FlexReport1 C# // レポート定義をロードします c1FlexReport1.Load(@"..\..\Products Report.flxr", "14a: サブレポート"); // レポートをプレビュー表示します c1FlexViewer1.DocumentSource = c1FlexReport1; 30 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 31 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 設計時サポート FlexReport for WinForms は、Visual Studio のプロパティグリッド、メニュー、およびデザイナを使用して設計時に簡単に設 定できます。以下のセクションでは、設計時環境を使用して FlexReport と FlexViewer を設定する方法について説明しま す。 [C1FlexReport のタスク]メニュー Visual Studio では、C1FlexReport コンポーネントにスマートタグが含まれます。スマートタグは、最もよく使用されるプロパ ティを提供するショートカットタスクメニューです。 C1FlexReport コンポーネントから、FlexReport ウィザード ウィザード(まだ作成されていないレポートを定義する)または FlexReportDesigner(プロジェクトに既に存在するレポートを定義する)にすばやく簡単にアクセスしたり、スマートタグからレ ポートをロードすることができます。 [C1FlexReport のタスク] のタスク]メニューにアクセスするには、C1FlexReport コンポーネントの右上隅にあるスマートタグ クします。 をクリッ [C1FlexReport のタスク] のタスク]メニューの機能は次のとおりです。 現在のレポート ReportName プロパティで指定された現在のレポートの名前を表示します。 レポートのロード [レポートのロード] [レポートのロード]をクリックすると、[レポートのロード] [レポートのロード]ダイアログボックスが表示されます。レポートのロードの詳細 については、「設計時の FlexReport のロード」を参照してください。 レポートの編集 [レポートの編集] [レポートの編集]をクリックすると、レポート定義がまだ作成されていない場合は FlexReport ウィザード ウィザードが表示され、 既にレポートが作成されている場合は C1FlexReportDesigner が表示されます。 FlexReport ウィザード ウィザードの使用方法については、「手順 1/4:レポート定義の作成」を参照してくださ い。C1FlexReportDesigner の使用方法については、「FlexReportDesigner の操作」を参照してください。 レポートのクリア C1FlexReport にロードされたレポートをクリアします。[レポートのクリア]をクリックすると、「レポート[レポート名]を本 当にクリアしますか?」と尋ねられます。 バージョン情報 [バージョン情報] [バージョン情報]をクリックすると、[バージョン情報] [バージョン情報]ダイアログボックスが表示されます。ここに、C1.Win.FlexReport のバージョン番号、ライセンス、オンラインリソースに関する情報が表示されます。 32 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [C1FlexViewer のタスク]メニュー [C1FlexViewer のタスク] のタスク]メニューでは、C1FlexViewer コントロールを親コンテナにすばやく簡単にドッキングしたり、[ローカ [ローカ ライズ] ライズ]ダイアログボックスにアクセスすることができます。 [C1FlexViewer のタスク] のタスク]メニューにアクセスするには、コントロールの右上隅にあるスマートタグ をクリックします。 [C1FlexViewer のタスク] のタスク]メニューの機能は次のとおりです。 ローカライズ [ローカライズ] [ローカライズ]ボタンをクリックすると、[ローカライズ] [ローカライズ]ダイアログボックスが表示されます。[ローカライズ] [ローカライズ]ダイアログ ボックスで、ローカライズ設定をカスタマイズできます。 C1FlexViewer について [バージョン情報] [バージョン情報]をクリックすると、コントロールの[バージョン情報] [バージョン情報]ダイアログボックスにコントロールのビルドバージョ ンが表示されます。 親コンテナにドッキングする/親コンテナでドッキングを解除する [親コンテナにドッキングする] [親コンテナにドッキングする]をクリックすると、C1FlexViewer の Dock プロパティが Fill に設定されます。 C1FlexViewer が親コンテナにドッキングされている場合は、親コンテナから C1FlexViewer をドッキング解除するオプ ションを使用できるようになります。[親コンテナでドッキングを解除する] [親コンテナでドッキングを解除する]をクリックすると、C1FlexViewer の Dock プ ロパティが None に設定されます。 33 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport の操作 C1FlexReport の主な操作手順は次のとおりです。 1. レポートを作成するには、最初に、FlexReportDesigner アプリケーションを使用してレポート定義を作成します。レ ポート定義は、.flxr ファイルとして保存されます。レポート定義は、最初から設計することも、既存の Microsoft Access レポートや Crystal Reports からインポートすることもできます。インポートしたら、デザイナを使用して基本レポートを変 更できます。 2. C1FlexReport コンポーネントは、レポート定義を読み込み、任意の標準 .NET データソースから取得したデータを使 用してレポートをレンダリングします。 3. レポート定義は、設計時にロードしてアプリケーションに埋め込むことも、実行時に読み込んで変更することもできま す。(C1FlexReport オブジェクトモデルを使用して、最初からレポート定義を作成することもできます。) 4. レポートは、プリンタや C1FlexViewer コントロールに直接レンダリングしたり、さまざまな書式にエクスポートすること ができます。 次の図は、FlexReport for WinForms パッケージ内のコンポーネント間の関係を示します。 メモ: 太線で囲まれた四角形は、コードコンポーネント(コントロールとアプリケーション)を表します。細線で囲まれた四 角形は、情報を含むファイル(レポート定義、データ、完成したレポート)を表します。 次の各番号は、コンポーネント間の関係を示す図中の矢印の番号を指しています。 1. C1FlexReportDesigner アプリケーションを使用して、FLXR レポート定義ファイルを作成、編集、および保存します。 2. C1FlexReport コンポーネントは、デザイナで作成された FLXR ファイルからレポート定義をロードします。これは、設計 時に行うことも(この場合、FLXR ファイルはコントロールに保持されるため、実行時には不要になります)、実行時に Load メソッドを使用して行うこともできます。 3. C1FlexReport コンポーネントは、レポート定義ファイルで指定されたデータソースからデータをロードします。または、 独自のカスタムデータソースを提供することもできます。 34 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 4. C1FlexReport コンポーネントは、レポート定義に従ってデータを書式設定し、レポートを (a) プリンタ、(b) プレビューコ ントロール、(c) またはいくつかのファイル形式の 1 つにレンダリングします。 5. カスタムアプリケーションは、さまざまな機能を持つオブジェクトモデルを使用して C1FlexReport コンポーネントと通信 できるため、レポートを簡単にカスタマイズできます。また、まったく新しいレポートを生成することもできま す。C1FlexReportDesigner は、このようなアプリケーションの一例です。 メモ メモ:FlexReport を使用するには、オペレーティングシステムが NT 6.1 コアをサポートする必要があります。した がって、FlexReport に必要な最小限のサーバー構成は、Windows Server 2008 R2 です。 C1FlexReport と C1Document C1FlexReport は、C1FlexReport と C1SsrsDocumentSource の基本クラスを公開する C1.Win.C1Document アセンブリ を使用します。 C1Document::ComponentOne ドキュメントを表します。主な機能は次のとおりです。 ドキュメントを RenderObjects ツリーとして保存します。 ドキュメントのコンテンツをレンダリングします。 テキスト選択範囲を強調表示します。 HitTest などのメソッドを通して、他の要素に対する特定のオブジェクトの位置をチェックします。 C1Document は、WinForms の C1Framework ライブラリに似ています。これは、他のコンポーネントによって使用さ れるかなり低レベルのユーティリティクラスセットです。現在は、C1SsrsDocumentSource、C1SsrsViewer、および C1FlexReport によって使用されます。 C1DocumentSource::さまざまなドキュメントタイプとレポートタイプを操作する機能を提供します。これは、 C1Document オブジェクトを構築するための基本クラスです。主な機能は次のとおりです。 ドキュメントを非同期にレンダリングするためのインフラストラクチャを提供します。 ドキュメントの生成時にパラメータをサポートします。 生成されたドキュメント内のテキスト検索をサポートします。 C1FlexReport は、C1DocumentSource から派生しています。C1DocumentSource を使用して、非同期レンダリン グ、パラメータサポート、およびテキスト検索を提供します。これは、C1FlexReport を他のプラットフォーム(XAML)に移 植しやすいということも意味します。 C1Document の重要な変更点 FlexReport の開発では、C1.Win.C1Document.C1DocumentSource と C1.Win.C1Document.C1SSRSDocumentSource に重要な変更が行われまし た。C1.Win.C1Document.C1DocumentSource と C1.Win.C1Document.C1SSRSDocumentSource を使用する際は、 次の重要な変更点に注意してください。 OpenXXX メソッドはすべて削除されました。 public void Open(C1DocumentLocation documentLocation); public IAsyncActionWithProgress<double> OpenAsyncEx(C1DocumentLocation documentLocation); public IAsyncActionWithProgress<double> OpenAsyncEx(); public void Open(); public Task OpenAsync(); public Task OpenAsync(C1DocumentLocation documentLocation); DocumentLocation、ConnectionOptions などの必要なプロパティをすべて定義したら、すぐに C1SSRSDocumentSource.Generate() を使用できるようになりました。 すべての GenerateXXX メソッドは C1SSRSDocumentSource でしかアクセスできなくなりました。C1DocumentSource 35 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms では、これらは内部的に使用されます。 public void Generate(); public IAsyncActionWithProgress<double> GenerateAsyncEx(); public Task GenerateAsync(); ApplyParameterValuesXXX メソッドと CheckParameterValuesXXX メソッドはすべて削除されました。 public List<ParameterValueError> ApplyParameterValues(); public IAsyncOperationWithProgress<List<ParameterValueError>, double> ApplyParameterValuesAsyncEx(); public Task<List<ParameterValueError>> ApplyParameterValuesAsync(); public List<ParameterValueError> CheckParameterValues(); public Task<List<ParameterValueError>> CheckParameterValuesAsync(); public IAsyncOperationWithProgress<List<ParameterValueError>, double> CheckParameterValuesAsyncEx(); 代わりに、C1SSRSDocumentSource.ValidateParameters(...) を使用します。パラメータの値は、生成前に自動的 に適用されます。 ExecuteCustomActionXXX、GetPageXXX、GetBookmarkPositionXXX() の各メソッドは、内部的に使用されるようにな り、アクセスできなくなりました。 public IAsyncOperationWithProgress<C1BookmarkPosition, double> ExecuteCustomActionAsyncEx(CustomAction action); public Task<C1BookmarkPosition> ExecuteCustomActionAsync(CustomAction action); public C1Page GetPage(int pageIndex); public Task<C1Page> GetPageAsync(int pageIndex); public IAsyncOperationWithProgress<C1Page, double> GetPageAsyncEx(int pageIndex); public virtual C1Page GetLoadedPage(int pageIndex); public bool IsPageLoading(int pageIndex); public C1BookmarkPosition GetBookmarkPosition(string bookmark); public IAsyncOperationWithProgress<C1BookmarkPosition, double> GetBookmarkPositionAsyncEx(string bookmark); public Task<C1BookmarkPosition> GetBookmarkPositionAsync(string bookmark); テキスト検索に関連する機能はすべて C1FlexViewer に移行されました。さらに、次のメソッドとプロパティが削除され ました。 public C1FoundPosition FindTextStart(int startPageIndex, bool wholeDocument, C1FindTextParams findParams); public IAsyncOperationWithProgress<C1FoundPosition, double> FindTextStartAsyncEx(int startPageIndex, bool wholeDocument, C1FindTextParams findParams); public Task<C1FoundPosition> FindTextStartAsync(int startPageIndex, bool wholeDocument, C1FindTextParams findParams); public C1FoundPosition FindTextNext(C1FoundPosition foundPosition); public IAsyncOperationWithProgress<C1FoundPosition, double> FindTextNextAsyncEx(C1FoundPosition foundPosition); public Task<C1FoundPosition> FindTextNextAsync(C1FoundPosition foundPosition); public C1FoundPosition FindTextPrevious(C1FoundPosition foundPosition); public IAsyncOperationWithProgress<C1FoundPosition, double> FindTextPreviousAsyncEx(C1FoundPosition foundPosition); public Task<C1FoundPosition> FindTextPreviousAsync(C1FoundPosition foundPosition); public void FindTextReset(); public C1HighlightAttrs FindMatchHighlight { get; set; } public C1HighlightAttrs ActiveFindMatchHighlight { get; set; } public IList<C1FoundPosition> FoundPositions { get; } public C1FoundPosition ActiveFoundPosition { get; set; } 次のプロパティは削除されました(テキスト選択機能はビューアに移行されました)。 public C1DocumentRange SelectedRange { get; set; } public C1HighlightAttrs SelectionHighlight { get; set; } プロパティ C1DocumentSource.State { get; set; } と列挙 C1DocumentSourceState は削除されました。 代わりに C1DocumentSource.BusyState プロパティを次のように使用します。 public C1DocumentSourceBusyState BusyState { get; } 36 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms // 概要: // C1DocumentSource オブジェクトのビジー状態を記述します。 public enum C1DocumentSourceBusyState { // 概要: // ドキュメントは準備できています(ビジー状態ではない)。 Ready, // 概要: // ドキュメントを生成中です。 Generating, // 概要: // ドキュメントをエクスポート中です。 Exporting, // 概要: // ドキュメントを印刷中です。 Printing } C1DocumentSource の現在の状態を特定するには、次のプロパティを使用できます。 // 概要: // 現在の C1DocumentSource がビジーかどうかを示す値を取得します。 public bool IsBusy { get; } // 概要: // この C1DocumentSource が破棄されて使用できない状態かどうかを示す値を取得します。 public bool IsDisposed { get; } 次のイベントは削除されました。 event EventHandler<ExecuteCustomActionCompletedEventArgs> ExecuteCustomActionCompleted; event EventHandler<GetPageCompletedEventArgs> GetPageCompleted; event EventHandler<GetLinkTargetPositionCompletedEventArgs> GetLinkTargetPositionCompleted; event EventHandler PagesClear; 次のイベントは C1SSRSDocumentSource に移行されました。 event EventHandler<AsyncCompletedEventArgs> GenerateCompleted; event EventHandler<ValidateParametersCompletedEventArgs> ValidateParametersCompleted; event EventHandler<ExportCompletedEventArgs> ExportCompleted; 次のメソッドは、C1SSRSDocumentSource() からのみアクセスできます。 public void Clear(); public void Cancel(); ApplyParameterValues と CheckParameterValues に代わり、ValidateParameterXXX メソッドが追加されました。 public List<ParameterValidationError> ValidateParameters(); 非同期バージョン public new IAsyncOperationWithProgress<List<ParameterValidationError>, double> ValidateParametersAsyncEx(); public Task<List<ParameterValidationError>> ValidateParametersAsync(); これらのメソッドは現在のパラメータ値を検証し、値が有効な場合は、有効な値のリストを更新します。レポートの生成 が開始されると、これらのパラメータ値が自動的に適用されるようになりました。 FlexReport のデータ連結 FlexReport でレポートを作成するには、レポート定義の他に実際のデータが必要です。通常は、データベースからデータを取 得しますが、他の場所から取得することもできます。以下のトピックでは、他のソースからデータを取得する方法を確認します。 37 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms データベースからのデータの取得 FlexReport でレポートデータを取得またはロードするには、C1FlexReport の以下の DataSource プロパティを設定する必要 があります。 ConnectionString RecordSource データソースを設定するには Visual Basic 'データソースを初期化します Dim ds As DataSource = C1FlexReport1.DataSource ds.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\ComponentOne Samples\Common\C1Nwind.mdb;" ds.RecordSource = "Employees" C# //データソースを初期化します DataSource ds = c1FlexReport1.DataSource; ds.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\...\ComponentOne Samples\Common\C1NWind.mdb;"; ds.RecordSource = "Employees"; これらのプロパティを設定すると、C1FlexReport はデータソースを初期化し、これを使用してデータベースから自動的にデータ をロードします。これは、「手順 1/4:レポート定義の作成」で説明するコードまたはデザイナを使用したデータソースの初期化 と同じです。 ストアドプロシージャからのデータの取得 ストアドプロシージャ(sproc)は、複数のアプリケーションにまたがるロジックの一貫した実装に役立つほか、パフォーマンスを 向上させ、ユーザーがデータベース内のテーブルの詳細を知る必要をなくします。ストアドプロシージャの大きな利点の 1 つ は、データベースがレコードセットをフィルタ処理するためのパラメータを渡すことができることです。これにより、返されるデー タセットが少量になるので、レポートをより速くより簡単に操作できます。 C1FlexReport ウィザード ウィザードでは、ストアドプロシージャからレポートにデータを挿入できます。C1FlexReport ウィザード ウィザードを開くに は、次のいずれかを実行します。 Visual Studio で、C1FlexReport コンテキストメニューの[レポートの編集] [レポートの編集]を選択します。 Visual Studio で、[[C1FlexReport のタスク] のタスク]メニューの[レポートの編集] [レポートの編集]を選択します。 C1FlexReportDesigner アプリケーションで、[レポート] [レポート]タブの[新しいレポート] [新しいレポート]ボタンをクリックします。 ストアドプロシージャによるレポートへのデータの挿入は、SQL 文や直接テーブルを使用する方法と違いがありませ ん。C1FlexReport ウィザード ウィザードの最初の画面で、省略符 省略符ボタンをクリックしてデータソースを選択します。次に、有効なデータ ソースのリストから[ストアドプロシージャ] [ストアドプロシージャ]を選択します。 38 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [次へ] [次へ]を選択し、ウィザードを続行します。 他の形式のデータのロードと同様に、次の 2 つのオプションがあります。 DataSource の ConnectionString プロパティと RecordSource プロパティを使用してデータソースを選択できます。 デザイナで、(省略符[...]ボタンをクリックして)DataSource ダイアログボックスを使用して接続文字列を選択し、使用 するテーブルまたは sproc をリストから選択します。次に例を示します。 connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Windows 8.1\Documents\ComponentOne Samples\Common\C1NWind.mdb;Persist Security Info=False;" RecordSource = "[Products by Category]" (この例では、ストアドプロシージャ名にスペースが含まれているため、それが角かっこで囲まれています。) 任意の方法でデータソースを作成し、それを DataSource の Recordset プロパティに割り当てることができます。 この方法では、コードを記述する必要がありますが、どこかにデータがキャッシュされており、それを使用して複数のレ ポートを作成する場合に役立ちます。これは、上記の方法より優先されます (ConnectionString、RecordSource、Recordset をすべて指定した場合、C1FlexReport は Recordset を使用しま す)。 使用する接続/アダプタのタイプ(OleDb、SQL、Oracle など)によって構文は異なります。簡単に正しい構文を使用する には、Visual Studio のサーバーエクスプローラーからフォームにテーブルまたは sproc をドラッグします。これで、すべ ての必要な要素が正しく追加されるので、コードを調べて重要な部分を確認できます。 ストアドプロシージャは、その名前を指定することでデータソースとして使用できます。sproc にパラメータがある場合 は、名前をパラメータとして渡します。たとえば、MSSQL と ADVENTURE_WORKS.mdf データベースに基づいて構築さ れたレポート定義において、C1FlexReportDesigner で指定された SQL 要求は次のとおりです 39 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms (ADVENTUREWORKS_DATA.MDF のパスは適宜調整が必要)。 PARAMETERS Employee Int 290; DECLARE @RC int DECLARE @EmployeeID int set @EmployeeID = [Empoyee] EXECUTE @RC = [C:\ADVENTUREWORKS_DATA.MDF].[dbo].[uspGetEmployeeManagers] @EmployeeID データテーブルオブジェクトをデータソースとして使用 C1FlexReport の外部にあるデータを操作し、それを DataTable オブジェクトにロードしなければならないアプリケーションは よくあります。このような場合は、DataTable オブジェクトをレポートデータソースとして使用して、レポートのレンダリング時に データを再ロードする無駄を省くことができます。 この方法は、次のようなアプリケーションでも役立ちます。 セキュリティ制限により、接続文字列を非公開にする必要があり、データだけ(ソースではなく)を公開できる場合。 データベースが OleDb(C1FlexReport で内部的に使用されるプロバイダ)によってサポートされていない場合。 データをデータベース以外から取得する場合。代わりに、DataTable を作成し、カスタムコードを使用してデータを挿入 します。 DataTable オブジェクトを C1FlexReport のデータソースとして使用するには、レポート定義をロードし、DataTable を C1FlexReport.DataSource.Recordset プロパティに割り当てるだけです。次に例を示します。 Visual Basic ' キャッシュまたはセキュリティで保護されたカスタムプロバイダから DataTable をロードします Dim dt As DataTable = GetMyDataTable() ' レポート定義をロードします(データソースを設定する前) C1FlexReport1.Load(@"reportFile", "reportName") ' DataTable をデータソースとして使用します C1FlexReport1.DataSource.Recordset = dt C# // キャッシュまたはセキュリティで保護されたカスタムプロバイダから DataTable をロードします DataTable dt = GetMyDataTable(); // レポート定義をロードします(データソースを設定する前) c1FlexReport1.Load(@"reportFile", "reportName"); // DataTable をデータソースとして使用します c1FlexReport1.DataSource.Recordset = dt; カスタムデータソースオブジェクトの使用 カスタムオブジェクトをデータソースとして使用できます。必要な条件は、カスタムオブジェクトが IC1FlexReportRecordset イ ンタフェースを実装することだけです。 IC1FlexReportRecordset は、事実上どのようなデータの集合にも簡単に追加できる簡潔で実装しやすいインタフェースで す。これは、DataTable オブジェクトを作成し、それにすべてのデータをコピーする方法より効率的であることが多くあります。 たとえば、カスタムデータソースオブジェクトを使用して、ファイルシステムやカスタム .xml ファイルまたはカスタム .flxr ファイ 40 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ルをラップできます。 カスタムデータソースオブジェクトを使用するには、レポート定義をロードし、そのオブジェクトを C1FlexReport の Recordset プロパティに割り当てます。次に例を示します。 Visual Basic ' カスタムデータソースオブジェクトを取得します Dim rs As IC1FlexReportRecordset = CType(GetMyCustomDataSource(), IC1FlexReportRecordset) ' レポート定義をロードします(データソースを設定する前) C1FlexReport1.Load(@"reportFile", "reportName") ' C1FlexReport コンポーネントでカスタムデータソースオブジェクトを使用します C1FlexReport1.DataSource.Recordset = rs C# // カスタムデータソースオブジェクトを取得します IC1FlexReportRecordset rs = (IC1FlexReportRecordset)GetMyCustomDataSource(); // レポート定義をロードします(データソースを設定する前) c1FlexReport1.Load(@"reportFile", "reportName"); // C1FlexReport コンポーネントでカスタムデータソースオブジェクトを使用します c1FlexReport1.DataSource.Recordset = rs; FlexReport のデータソース FlexReport 定義には複数のデータソースを設定でき、これらのデータソースには C1FlexReport.DataSources コレクション からアクセスできます。このコレクション内のデータソースは、一意の名前で識別されます。これらのデータソースは次のように 使用できます。 メインデータソース: メインデータソース:これはレポートのメインデータソースです。メインデータソースは、レポートの C1FlexReport.DataSourceName プロパティを使用して指定します。メインデータソースが指定されていない場合 (DataSourceName が空、または DataSources コレクションにない名前が指定されている)、C1FlexReport は非連結 モードでレンダリングされ、詳細セクションが 1 つだけ含まれます。 パラメータ用のデータソース: パラメータ用のデータソース:これは、レポートパラメータ(C1FlexReport.Parameters コレクション内の要素)として有 効な値のソースです。パラメータ用のデータソース は、ReportParameter.AllowedValuesDefinition.Binding.DataSourceName プロパティを使用して指定します。 チャート用のデータソース: チャート用のデータソース:これは、チャートフィールド用のデータソースです。チャート用のデータソース は、ChartField.DataSource プロパティを使用して指定します。 C1Report との下位互換性のため、C1FlexReport には DataSources[DataSourceName] を指す DataSource プロパティがあ ります。新しい C1FlexReport を作成すると、「Main」という名前の 1 つの要素が C1FlexReport.DataSources コレクションに 追加され、「Main」が C1FlexReport.DataSourceName プロパティに割り当てられます。 C1Report では、メインデータソースがレポートの唯一のデータソースです。 コードを使用した複数のデータソースへの接続 「FlexReport クイックスタート」では、メインデータソースに連結されるレポートの作成方法を学習しました。1 つのレポートが複 41 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 数のデータソースを持つことができるため、チャートやパラメータを使用しながら、これらのデータソースへの接続方法につい て学習する必要があります。 以下のセクションでは、複数のデータソースを使用するレポートで、チャートやパラメータにデータを連結する方法について説 明します。 複数データソースレポートでのチャートへのデータの連結 レポートにチャート チャートフィールドを追加する際は、最初の手順としてチャートをデータソースに連結します。 たとえば、レポートに「Employees」と「Products」という 2 つのデータソースがあるとします。Employees データソースの FullName と Age を表示するチャートと、Products データソースの CategoryName と Sum(UnitsInStock) を表示するチャート の 2 つを作成します。 次の手順で、このシナリオを実現できます。 1. 2. 3. 4. レポートで 2 つのデータソース「Employees」と「Products」を作成します。 Employees データソースで 2 つの計算フィールド「FullName」と「Age」を定義します。 Products データソースで 2 つの計算フィールド「CategoryName」と「Sum(UnitsInStock)」を定義します。 Employees データソースと Products データソースに個別に連結する 2 つのチャートフィールドを作成します。 そのためのコード例を次に示します。 Visual Basic Private report As C1FlexReport Private Function CreateChartSampleReport() As C1FlexReport report = New C1FlexReport() With { _ .ReportName = "ChartSample" _ } ' データソース Employees を追加します Dim dsEmployees = New DataSource() With { _ .Name = "Employees", _ .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\Reports\C1Nwind.mdb;Persist Security Info=False", _ .RecordSource = "Select * from Employees" _ } report.DataSources.Add(dsEmployees) ' 計算フィールド FullName を追加します。 Dim calcFullName = New CalculatedField("FullName", GetType(String), "=LastName & "" "" & FirstName") dsEmployees.CalculatedFields.Add(calcFullName) ' 計算フィールド Age を追加します。 Dim calcAge = New CalculatedField("Age", GetType(Integer), "=Year(Now())-Year(BirthDate) + 1") dsEmployees.CalculatedFields.Add(calcAge) ' データソース Products を追加します Dim dsProducts = New DataSource() With { _ .Name = "Products", _ .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\Reports\C1Nwind.mdb;Persist Security Info=False", _ .RecordSource = "Select Products.CategoryID as CategoryID, Categories.CategoryName as CategoryName, 42 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Products.UnitsInStock as UnitsInStock from Products inner join Categories on Products.CategoryID = Categories.CategoryID" _ } report.DataSources.Add(dsProducts) report.Sections.Header.Visible = True ' Employees データソースを使用するチャートフィールドを追加します。 Dim sectionEmployees = report.Sections.Header.SubSections.Add() sectionEmployees.Name = "ChartWithEmployees" sectionEmployees.Height = 5200 sectionEmployees.Visible = True sectionEmployees.Fields.Add(CreateChartForEmployees()) ' Products データソースを使用するチャートフィールドを追加します。 Dim sectionProducts = report.Sections.Header.SubSections.Add() sectionProducts.Name = "ChartWithProducts" sectionProducts.Height = 5200 sectionProducts.Visible = True sectionProducts.Fields.Add(CreateChartForProducts()) Return report End Function Private Function CreateChartForEmployees() As ChartField Dim chart = CreateChartField("Chart1", "Employees") chart.Header.Text = "Employees Age" chart.ChartArea2D.Inverted = True chart.ChartArea2D.AxisX.OnTop = True Dim group = chart.ChartGroups2D.Group0 group.ChartType = Chart2DType.Bar Dim data = group.ChartData data.IsForEachRecord = True ' データソースの各レコードの値を 表示します data.CategoryGroups.AddNewGroup("=FullName") ' FullName でグループ化します Dim seriesTemplate = data.SeriesValues.AddNewSeries() seriesTemplate.DataValues.AddNewValue("=Age") ' Y 軸 に Age を表示します Return chart End Function Private Function CreateChartForProducts() As ChartField Dim chart = CreateChartField("Chart2", "Products") chart.Header.Text = "Sum of UnitsInStock by Category" chart.ChartArea2D.Inverted = True chart.ChartArea2D.AxisX.OnTop = True Dim group = chart.ChartGroups2D.Group0 group.ChartType = Chart2DType.Bar Dim data = group.ChartData Dim categoryGroup = data.CategoryGroups.AddNewGroup("=CategoryID") ' CategoryID でグループ化します categoryGroup.LabelExpression = "=CategoryName" ' X 軸に CategoryName を表示します Dim seriesTemplate = data.SeriesValues.AddNewSeries() 43 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms seriesTemplate.DataValues.AddNewValue("=Sum(UnitsInStock)") ' X 軸に UnitsInStock の合計を表示します Return chart End Function Private Function CreateChartField(name As String, datasource As String) As ChartField Dim chart = New ChartField() With { _ .Name = name, _ .Width = 7500, _ .Height = 5000, _ .Top = 100, _ .Left = 100, _ .DataSource = datasource _ } chart.Border.Color = Color.Black chart.Border.Width = 15 chart.Border.Style = DashStyle.Solid chart.Border.CornerRadius = New CornerRadius(200.0) chart.ChartArea2D.AxisY.AutoMin = False Return chart End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click CreateChartSampleReport() C1FlexViewer1.DocumentSource = report End Sub C# private C1FlexReport CreateChartSampleReport() { var report = new C1FlexReport { ReportName = "ChartSample" }; // データソース Employees を追加します var dsEmployees = new DataSource { Name = "Employees", ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\Reports\C1Nwind.mdb;Persist Security Info=False", RecordSource = "Select * from Employees", }; report.DataSources.Add(dsEmployees); // 計算フィールド FullName を追加します。 var calcFullName = new CalculatedField("FullName", typeof(string), "=LastName & \" \" & FirstName"); dsEmployees.CalculatedFields.Add(calcFullName); // 計算フィールド Age を追加します。 var calcAge = new CalculatedField("Age", typeof(int), "=Year(Now())-Year(BirthDate) + 1"); dsEmployees.CalculatedFields.Add(calcAge); 44 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms // データソース Products を追加します var dsProducts = new DataSource { Name = "Products", ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\Reports\C1Nwind.mdb;Persist Security Info=False", RecordSource = "Select Products.CategoryID as CategoryID, Categories.CategoryName as CategoryName, Products.UnitsInStock as UnitsInStock from Products inner join Categories on Products.CategoryID = Categories.CategoryID" }; report.DataSources.Add(dsProducts); report.Sections.Header.Visible = true; // Employees データソースを使用するチャートフィールドを追加します。 var sectionEmployees = report.Sections.Header.SubSections.Add(); sectionEmployees.Name = "ChartWithEmployees"; sectionEmployees.Height = 5200; sectionEmployees.Visible = true; sectionEmployees.Fields.Add(CreateChartForEmployees()); // Products データソースを使用するチャートフィールドを追加します。 var sectionProducts = report.Sections.Header.SubSections.Add(); sectionProducts.Name = "ChartWithProducts"; sectionProducts.Height = 5200; sectionProducts.Visible = true; sectionProducts.Fields.Add(CreateChartForProducts()); return report; } private ChartField CreateChartForEmployees() { var chart = CreateChartField("Chart1", "Employees"); chart.Header.Text = "Employees Age"; chart.ChartArea2D.Inverted = true; chart.ChartArea2D.AxisX.OnTop = true; var group = chart.ChartGroups2D.Group0; group.ChartType = Chart2DType.Bar; var data = group.ChartData; data.IsForEachRecord = true; // データソースの各レコードの値を 表示します data.CategoryGroups.AddNewGroup("=FullName"); // FullName でグループ化します var seriesTemplate = data.SeriesValues.AddNewSeries(); seriesTemplate.DataValues.AddNewValue("=Age"); // X 軸に Age を表示します return chart; } private ChartField CreateChartForProducts() 45 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms { var chart = CreateChartField("Chart2", "Products"); chart.Header.Text = "Sum of UnitsInStock by Category"; chart.ChartArea2D.Inverted = true; chart.ChartArea2D.AxisX.OnTop = true; var group = chart.ChartGroups2D.Group0; group.ChartType = Chart2DType.Bar; var data = group.ChartData; var categoryGroup = data.CategoryGroups.AddNewGroup("=CategoryID"); // CategoryID でグ ループ化します categoryGroup.LabelExpression = "=CategoryName"; // X 軸 に CategoryName を表示します。 var seriesTemplate = data.SeriesValues.AddNewSeries(); seriesTemplate.DataValues.AddNewValue("=Sum(UnitsInStock)"); // X 軸 に UnitsInStock の合計を表示します。 return chart; } private ChartField CreateChartField(string name, string datasource) { var chart = new ChartField { Name = name, Width = 7500, Height = 5000, Top = 100, Left = 100, DataSource = datasource, }; chart.Border.Color = Color.Black; chart.Border.Width = 15; chart.Border.Style = DashStyle.Solid; chart.Border.CornerRadius = new CornerRadius(200d); chart.ChartArea2D.AxisY.AutoMin = false; return chart; } private void button1_Click(object sender, EventArgs e) { CreateChartSampleReport(); c1FlexViewer1.DocumentSource = report; } 46 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 複数データソースレポートでのパラメータへのデータの連結 パラメータにデータを連結することで、レポートパラメータ(C1FlexReport.Parameters コレクション内の要素)に対して有効な 値が定義できます。ReportParameter.AllowedValuesDefinition.Binding.DataSourceName プロパティは、有効なパラ メータ値のリストを作成するために使用されるデータソースを示します。次のコード例は、複数のデータソースを含むレポートの パラメータにデータを連結する方法を示します。 Visual Basic ' データソースおよびこのデータソースを使用するパラメータを追加します Dim mds As DataSource = C1FlexReport.DataSource Dim ds As New DataSource() 47 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ds.Name = "CategoriesDS" ds.ConnectionString = mds.ConnectionString ds.RecordSource = "select * from categories" ds.DataProvider = DataProvider.OLEDB C1FlexReport.DataSources.Add(ds) mds.RecordSource = "select * from products where categoryid = [CategoryParam]" Dim rp As New ReportParameter() rp.DataType = Doc.ParameterType.[Integer] rp.Prompt = "Category" rp.Name = "CategoryParam" rp.AllowedValuesDefinition.Binding.DataSourceName = "CategoriesDS" rp.AllowedValuesDefinition.Binding.ValueExpression = "CategoryID" rp.AllowedValuesDefinition.Binding.LabelExpression = "CategoryName" C1FlexReport.Parameters.Add(rp) C# // データソースおよびこのデータソースを使用するパラメータを追加します DataSource mds = c1FlexReport.DataSource; DataSource ds = new DataSource(); ds.Name = "CategoriesDS"; ds.ConnectionString = mds.ConnectionString; ds.RecordSource = "select * from categories"; ds.DataProvider = DataProvider.OLEDB; c1FlexReport.DataSources.Add(ds); mds.RecordSource = "select * from products where categoryid = [CategoryParam]"; ReportParameter rp = new ReportParameter(); rp.DataType = Doc.ParameterType.Integer; rp.Prompt = "Category"; rp.Name = "CategoryParam"; rp.AllowedValuesDefinition.Binding.DataSourceName = "CategoriesDS"; rp.AllowedValuesDefinition.Binding.ValueExpression = "CategoryID"; rp.AllowedValuesDefinition.Binding.LabelExpression = "CategoryName"; c1FlexReport.Parameters.Add(rp); 計算フィールドの定義 計算 計算フィールドには、実行時に評価される式が設定されます。計算フィールドは、DataSource.CalculatedFields.Add メソッド を使用してデータソースに追加できます。 たとえば、「CategoryID * 2」を計算する整数型の計算フィールド「Calc1」を追加するコードは、次のようになります。 Visual Basic Dim ds As DataSource = C1FlexReport1.DataSources(0) ds.CalculatedFields.Add(New CalculatedField("Calc1", GetType(Integer), "CategoryID * 2")) C# DataSource ds = c1FlexReport1.DataSources[0]; 48 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ds.CalculatedFields.Add(new CalculatedField("Calc1", typeof(int), "CategoryID * 2")); 複数の計算フィールドがある場合、それらは一意の名前を持つ必要があります。 デスクトップ用 FlexReport の開発 一般的なデスクトップ環境では、レポートを生成および表示するコンピュータと同じコンピュータで C1FlexReport を実行しま す。その場合でも、レポートのデータ自体は、リモートサーバーから取得されることがあります。次のセクションでは、 FlexReport が Visual Studio 環境でホストされているとします。 設計時の FlexReport のロード この例では、アプリケーションに組み込まれている所定のレポート定義セットを使用してレポートを生成します。このようなアプ リケーションは、外部のレポート定義ファイルに依存しません。また、エンドユーザーはこのようなレポートを変更できません。 このようなアプリケーションの主な長所は、レポート定義ファイルを配布する必要がないことと、レポートの形式を変更されない ようにできることです。短所は、アプリケーションを再コンパイルしないとレポートを変更できないことです。 既存のレポート定義を変更することなく使用する場合は、次の手順に従います。 1. 配布するレポート定義ごとに C1FlexReport コンポーネントを 1 つ追加します。各コントロールに、レンダリングするレ ポートに応じた名前を付けると、コードの保守が容易になります。 2. 各 C1FlexReport コンポーネントを右クリックし、[レポートのロード] [レポートのロード]メニューオプションを選択して、各コントロールにレ ポート定義をロードします。コンポーネントの上にあるスマートタグ( )をクリックして[[C1FlexReport のタスク] のタスク]メニュー を開き、[レポートのロード] [レポートのロード]オプションを選択することもできます。 [レポートのロード] [レポートのロード]ダイアログボックスが表示されるので、レポート定義ファイルを選択し、さらにそのファイル内のレ ポートを選択します。 レポートをロードするには、省略符 省略符ボタンをクリックし、手順 1 で作成したレポート定義ファイルを選択します。次に、ド ロップダウンリストからレポートを選択し、[[OK]]をクリックします。[レポートのロード] [レポートのロード]ダイアログボックスに、選択したレ ポート名、グループ数、セクション数、およびフィールド数が表示されます。ダイアログボックスは、次のように表示され ます。 3. フォームに C1FlexViewer コントロールを追加します。また、ユーザーがレポートを選択できるようにするためのコント ロール(メニュー、リストボックス、ボタングループなど)も追加します。 4. ユーザーが選択したレポートをレンダリングするためのコードを追加します。たとえば、前の手順で btnProductsReport という名前のボタンを追加した場合は、次のようなコードを追加します。 Visual Basic Private Sub btnProductsReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProductsReport.Click 49 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms c1FlexViewer1.DocumentSource =rptProducts End Sub C# private void btnProductsReport_Click(object sender, System.EventArgs e) { c1FlexViewer1.DocumentSource =rptProducts; } rptProducts は、ユーザーが選択したレポートを含む C1FlexReport コンポーネントの名前、c1FlexViewer1 は、C1FlexViewer コントロールの名前です。 設計時の FlexReport の作成 「設計時の FlexReport のロード」で説明されている[レポートのロード] [レポートのロード]を使用すると、既存のレポートを簡単にアプリケーショ ンに埋め込むことができます。ただし、レポートをカスタマイズする場合や、接続文字列とレコードソースを使用する代わりに、 Visual Studio アプリケーションでデータソースオブジェクトを定義して使用する場合もあります。このような場合は、代わり に[レポートの編集] [レポートの編集]コマンドを使用します。 設計時にレポートを作成または編集するには、C1FlexReport コンポーネントを右クリックし、[レポートの編集] [レポートの編集]メニューオプショ ンを選択して、C1FlexReportDesigner アプリケーションを呼び出します。コンポーネントの上にあるスマートタグ( )をクリッ クして[[C1FlexReport のタスク] のタスク]メニューを開き、[レポートの編集] [レポートの編集]オプションを選択することもできます。 メモ: コンテキストメニューやプロパティウィンドウに[レポートの編集] [レポートの編集]コマンドが表示されていない場合は、コントロール が C1FlexReportDesigner アプリケーションを見つけることができなかった可能性があります。この場合 は、C1FlexReportDesigner アプリケーションをスタンドアロンモードで一度実行します。Designer の場所がレジストリ に保存されるため、これで C1FlexReport コンポーネントが Designer を検出できるようになります。 C1FlexReportDesigner アプリケーションは、C1FlexReport コンポーネントに現在ロードされているレポートを表示します。 C1FlexReport コンポーネントが空の場合は、C1FlexReport ウィザード ウィザードが表示され、ここで新しいレポートを作成できます。 これは、スタンドアロンモードで使用される C1FlexReportDesigner アプリケーションと同じです。C1FlexReportDesigner ア プリケーションをこのモードで開始した場合は、次の点だけが異なります。 現在のアプリケーションで定義したデータソースオブジェクトを新しいレポートのデータソースとして使用できます。 デザイナを閉じると、行った変更がフォームの C1FlexReport コンポーネントに保存されます(変更を破棄するには、デ ザイナのメニューから[ファイル] [ファイル]→[終了] [終了]を選択し、変更の保存に対して[いいえ] [いいえ]を選択します)。 現在のアプリケーションで定義したデータソースオブジェクトを使用するには、デザイナの[データソース] [データソース]ボタンをクリック し、[データソースの選択] [データソースの選択]ダイアログボックスで[テーブル] [テーブル]オプションを選択します。 フォームに現在定義されているデータオブジェクトのリストが[テーブル] [テーブル]ページに表示されます(フォームに有効なデータソー スがない場合、このページは表示されません)。または、通常どおり、[[Connection string]]を使用して、接続文字列とレコー ドソースを作成して選択できます。 たとえば、メインフォームに DataSet オブジェクトとこれにアタッチされた複数の DataTable が含まれる場合、データソース選 択ダイアログボックスは次のように表示されます。 50 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms レポートの作成または編集が完了したら、メニューから[ファイル] [ファイル]→[保存] [保存]または[ファイル] [ファイル]→[終了] [終了]を選択してデザイナを閉 じることができます。これにより、レポート定義が直接コンポーネントに保存されます([レポートのロード] [レポートのロード]コマンドを使用して ファイルからレポート定義をロードした場合と同様)。 変更をキャンセルする場合は、メニューから[ファイル] [ファイル]→[終了] [終了]を選択し、[いいえ] [いいえ]を選択して、変更を保存しないでデザイナ を終了します。 実行時の FlexReport のロード 実行時にレポートをロードするには、レポート定義ファイルとビューアが必要です。このようなアプリケーションの主な長所は、レポート 形式を変更しても、アプリケーションを更新する必要がないことです。新しいレポート定義ファイルをユーザーに送るだけで済みます。 実行時にロードされるレポートを備えたアプリケーションを作成するには、次の手順に従います。 1. C1FlexReportDesigner アプリケーションで、必要なレポートをすべて作成します。詳細については、「C1FlexReportDesigner の操作」を参照してください。 2. 次のコントロールをアプリケーションに追加します。 c1FlexReport1 という名前の C1FlexReport コンポーネント fv という名前の C1FlexViewer コントロール cmbReport という名前の ComboBox コントロール button1 という名前の Button コントロール 3. 次の Import 文をファイルの先頭に追加します。 Visual Basic Imports C1.Win.FlexReport Imports System.IO C# using C1.Win.FlexReport; using System.IO; 51 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms これにより、完全名前空間を指定しなくても、C1FlexReport と System.IO のクラスとオブジェクトを参照できます。 4. レポート定義ファイルを読み取り、すべてのレポートのリストを構築するために、次のコードをボタンクリックイベントに追加しま す。 Visual Basic Private Sub button1_Click(sender As Object, e As EventArgs) ' アプリケーションパスを取得します Dim appPath As String appPath = Path.GetDirectoryName(Application.ExecutablePath).ToLower() Dim i As Integer = appPath.IndexOf("/bin") If (i < 0) Then i = appPath.IndexOf(vbBack & "in") End If If (i > 0) Then appPath = appPath.Remove(i, appPath.Length - i) End If ' レポート定義ファイルからレポートの名前を取得します m_ReportDefinitionFile = appPath & "\Data\Nwind.xml" Dim reports As String() = C1FlexReport.GetReportList(m_ReportDefinitionFile) ' コンボボックスにデータを設定します cmbReport.Items.Clear() For Each report As String In reports cmbReport.Items.Add(report) Next End Sub C# private void button1_Click(object sender, EventArgs e) { // アプリケーションパスを取得します string appPath; appPath = Path.GetDirectoryName(Application.ExecutablePath).ToLower(); int i = appPath.IndexOf("/bin"); if ((i < 0)) { i = appPath.IndexOf("\bin"); } if ((i > 0)) { appPath = appPath.Remove(i, appPath.Length i); } // レポート定義ファイルからレポートの名前を取得します m_ReportDefinitionFile = appPath + @"\Data\Nwind.xml"; string[] reports = C1FlexReport.GetReportList(m_ReportDefinitionFile); // コンボボックスにデータを設定します cmbReport.Items.Clear(); foreach (string report in reports) { cmbReport.Items.Add(report); } 52 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms } このコードは、最初に、レポート定義が格納されているファイルの場所を取得します。それには、システム定義の Path クラスと Application クラスの静的メソッドを使用します。レポート定義ファイルの場所と名前に合わせてコードを調整してください。 次に、GetReportList メソッドを使用してレポート定義ファイル(手順 1 で作成)内のすべてのレポート名を含む配列を取得し、 ユーザーがレポートを選択するためのコンボボックスにレポート名を挿入します。 5. ユーザーが選択したレポートをレンダリングするためのコードを追加します。次に例を示します。 Visual Basic Private Sub cmbReport_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cmbReport.SelectedIndexChanged Try Cursor = Cursors.WaitCursor ' レポートをロードします fv.StatusText = "Loading " & cmbReport.Text c1FlexReport1.Load(m_ReportDefinitionFile, cmbReport.Text) ' flexviewer コントロールにレンダリングします fv.StatusText = "Rendering " & cmbReport.Text fv.DocumentSource = c1FlexReport1 ' flexviewer コントロールにフォーカスを設定します fv.StartPage = 0 fv.Focus() Finally Cursor = Cursors.Default End Try End Sub C# private void cmbReport_SelectedIndexChanged(object sender, System.EventArgs e) { try { Cursor = Cursors.WaitCursor; // レポートをロードします fv.StatusText = "Loading " + cmbReport.Text; c1FlexReport1.Load(m_ReportDefinitionFile, cmbReport.Text); // flexviewer コントロールにレンダリングします fv.StatusText = "Rendering " + cmbReport.Text; fv.DocumentSource = c1FlexReport1; // flexviewer コントロールにフォーカスを設定します fv.Focus(); } finally { Cursor = Cursors.Default; } } 6. プロジェクトを実行します。 53 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms パラメータの追加 パラメータは、どのようなレポートでも重要な要素です。パラメータは、レポートに渡されたデータを操作することで、挿入される データに影響を及ぼします。パラメータを使用して、データのデフォルト値を変更したり、データにフィルタを適用することができ ます。また、複数値パラメータを使用して、複数の値を選択することもできます。 FlexReport のパラメータコレクション C1FlexReport.Parameters でパラメータを定義して、タイプ、キャプション、デフォルト 値、有効な値などを指定できます。 C1FlexReport.Parameters コレクションでパラメータとして定義される各要素は、ReportParameter クラスのインスタンスで す。これは次のプロパティを持ちます。 Nullable このパラメータの値を Null にできるかどうかを示す値を取得または設定します。複数値パラ メータの場合は、true にできません。 AllowBlank このパラメータの値を空の文字列にできるかどうかを示す値を取得または設定します。 DataType が String でない場合は無視されます。 54 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms MultiValue これが複数値パラメータ(値のセットを受け取ることができるパラメータ)であるかどうかを示す 値を取得または設定します。 Hidden このパラメータをユーザーに非表示にする(ただし、サブレポート、ドリルスルーレポートなどで プログラミングによって使用することは可能)かどうかを示す値を取得または設定します。 Prompt パラメータ値の入力を求める際にエンドユーザーに表示されるプロンプトを取得または設定し ます。 Value パラメータ値を取得または設定します。MultiValue が true の場合は、Value に配列を指定で きます(この場合は、すべての項目が同じ項目タイプを持つ必要があります)。 DataType パラメータのデータタイプを取得または設定します。 AllowedValuesDefinition このパラメータの許容値のリストを定義する AllowedValuesDefinition を取得します。許容値 は、AllowedValuesDefinition.Values プロパティを使用して静的リストとして指定するか、 AllowedValuesDefinition.Binding プロパティを使用してレポートのデータソースの 1 つに連 結された動的リストとして指定できます。 レポートパラメータは、FlexReportDesigner アプリケーションを使用して簡単に追加できます。詳細については、「パラメータの 操作」および「複数データソースレポートでのパラメータへのデータの連結」を参照してください。 データのグループ化 グループ化は、整理された方法でデータを表示するために最もよく使用される方法です。基本レイアウトの設計が完了したら、特 定のフィールドなどの基準に基づいてレコードを区切ることで、読みやすいレポートを作成できます。データをグループ化すること で、レコードをグループに分け、グループごとに概要やサマリーデータを表示することができます。グループの区切りは、グループ 化式に基づいて行われます。この式は、1 つ以上のレコードセットフィールドに基づいて作成されることが普通ですが、必要に応じ てさらに複雑な式にすることもできます。 FlexReport でグループ化を実行するには、C1FlexReport.Groups を使用します。 たとえば、特定の肩書きや役職に該当する従業員の名前をリストすることにします。この場合は、Title(肩書き)でリストをグループ 化します。以下の手順は、従業員リストを Title でグループ化する方法を示します。この例では、「FlexReport クイックスタート」で作 成したサンプルを使用します。 1. 2. 3. 4. FlexReport クイックスタートプロジェクトの Form に、C1CheckBox を追加します。 C1CheckBox Name を「groupC1CheckBox」に、Text を「Group Report by Title」に設定します。 CheckedChanged イベントを c1CheckBox1_CheckedChanged という名前で作成します。 次のコードを追加します。 Visual Basic Private grp As Group Private s As Section Private Sub c1CheckBox1_CheckedChanged(sender As Object, e As EventArgs) If groupC1CheckBox.Checked Then ' 従業員を役職でグループ化し、役職を昇順にソートします grp = C1FlexReport1.Groups.Add("GrpTitle", "Title", SortEnum.Ascending) ' 新しいグループのヘッダーセクションを書式設定します s = grp.SectionHeader s.Height = 1000 s.Visible = True Dim f As New TextField() f.Name = "Title" 55 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms f.Text.Expression = "Title" f.Left = 0 f.Top = 0 f.Width = C1FlexReport1.Layout.Width f.Height = 500 f.Align = FieldAlignEnum.LeftMiddle f.Font.Bold = True f.Font.Size = 12 f.Border = New Border(2, Color.Black, DashStyle.Solid) f.BackColor = Color.FromArgb(150, 150, 220) f.MarginLeft = 100 s.Fields.Add(f) C1FlexReport1.Render() Else btnEmployees.PerformClick() End If End Sub C# Group grp; Section s; private void c1CheckBox1_CheckedChanged(object sender, EventArgs e) { if (groupC1CheckBox.Checked) { // 従業員を役職でグループ化し、役職を昇順にソートします grp = c1FlexReport1.Groups.Add("GrpTitle", "Title", SortEnum.Ascending); // 新しいグループのヘッダーセクションを書式設定します s = grp.SectionHeader; s.Height = 1000; s.Visible = true; TextField f = new TextField(); f.Name = "Title"; f.Text.Expression = "Title"; f.Left = 0; f.Top = 0; f.Width = c1FlexReport1.Layout.Width; f.Height = 500; f.Align = FieldAlignEnum.LeftMiddle; f.Font.Bold = true; f.Font.Size = 12; f.Border = new Border(2, Color.Black, DashStyle.Solid); f.BackColor = Color.FromArgb(150, 150, 220); f.MarginLeft = 100; s.Fields.Add(f); c1FlexReport1.Render(); } else { btnEmployees.PerformClick(); } 56 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms } 5. プロジェクトを実行します。[Employees]ボタンをクリックして、レポートをレンダリングします。 6. [Title でレポートをグループ化]チェックボックスをクリックして、レポートにグループを表示します。役職が昇順にソートされ ていることを確認します。 小計などの集計の追加 C1FlexReport は、すべての計算フィールドで集計式をサポートします。集計式には、Sum、Min、Max、Avg、Count、Range、 Var などがあります。 すべての集計関数は引数として式を受け取り、レポート内の位置によって特定される範囲内でその式を評価します。たとえ ば、グループヘッダーまたはグループフッター内の集計は、そのグループを対象範囲にします。レポートヘッダーまたはレポー トフッター内の集計は、レポート全体を対象範囲にします。 たとえば、次の集計式は、集計の範囲(グループまたはレポート)内で Sales フィールドのすべての値の合計を返しま す。Sum(Sales) 次の集計式は、レポート内のすべての値に対して消費税の合計を返します(消費税を 8.5% と仮定)。Sum(Sales * 57 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 0.085) 次の例は、Count 集計を使用して、特定の役職に該当する従業員のレコードの数を計算します。 1. サンプル「データのグループ化」で作成したチェックボックスイベント(c1CheckBox1_CheckedChanged)に次のコードを 追加します。 Visual Basic Dim f1 As New Field() f1.Name = "CountRecords" f1.Text = "Count(GrpTitle)" f1.Left = 2000 f1.Top = 500 f1.Width = C1FlexReport1.Layout.Width - 2000 f1.Height = 400 f1.Align = FieldAlignEnum.LeftMiddle f1.MarginLeft = 100 f1.Calculated = True f1.Visible = True f1.BackColor = Color.Yellow f1.Font.Bold = True f1.Font.Size = 10 s.Fields.Add(f1) Dim tf As New TextField() tf.Name = "Text" tf.Text = "Number Of Records: " tf.Left = 0 tf.Top = 500 tf.Width = C1FlexReport1.Layout.Width - f1.Width tf.Height = 400 tf.Align = FieldAlignEnum.LeftMiddle tf.Font.Bold = True tf.Font.Size = 10 tf.BackColor = Color.Transparent tf.BackColor = Color.Yellow tf.MarginLeft = 100 tf.Visible = True s.Fields.Add(tf) C# Field f1 = new Field(); f1.Name = "CountRecords"; f1.Text = "Count(GrpTitle)"; f1.Left = 2000; f1.Top = 500; f1.Width = c1FlexReport1.Layout.Width - 2000; f1.Height = 400; f1.Align = FieldAlignEnum.LeftMiddle; f1.MarginLeft = 100; f1.Calculated = true; f1.Visible = true; f1.BackColor = Color.Yellow; f1.Font.Bold = true; 58 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms f1.Font.Size = 10; s.Fields.Add(f1); TextField tf = new TextField(); tf.Name = "Text"; tf.Text = "Number Of Records: "; tf.Left = 0; tf.Top = 500; tf.Width = c1FlexReport1.Layout.Width - f1.Width; tf.Height = 400; tf.Align = FieldAlignEnum.LeftMiddle; tf.Font.Bold = true; tf.Font.Size = 10; tf.BackColor = Color.Transparent; tf.BackColor = Color.Yellow; tf.MarginLeft = 100; tf.Visible = true; s.Fields.Add(tf); 2. プロジェクトを実行します。[Employees]ボタンをクリックして、レポートをレンダリングします。 3. [Title でレポートをグループ化]チェックボックスをクリックして、レポートにグループを表示します。各グループのレコー ド数が計算されることを確認します。 59 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms クロス集計レポートの作成 クロス集計レポートは、データを 2 次元(下方向と横方向)にグループ化します。クロス集計レポートは、情報を相互参照する形式で 大量のデータをまとめる場合に便利です。 次の手順に従って、「FlexReport クイックスタート」で作成したレポートにクロス集計レポートを作成します。 1. 2. 3. 4. FlexReport クイックスタートプロジェクトの Form に、Button を追加します。 ボタンの Name を「crossC1Button」に、Text を「View Cross Tab-Report」に設定します。 Click イベントを crossC1Button_Click という名前で作成します。 次のコードを記述します。 Visual Basic Private grp2 As Group Private Sub crossC1Button_Click(sender As Object, e As EventArgs) btnEmployees.PerformClick() c1FlexReport1.Sections.Detail.Visible = False grp2 = c1FlexReport1.Groups.Add("GrpCountry", "Country", SortEnum.Ascending) ' 新しいグループのヘッダーセクションを書式設定します c1FlexReport1.Sections.PageHeader.Height = 600 60 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms shpfld2.Top = 600 s = grp2.SectionHeader s.Height = 400 s.AutoHeight = AutoSizeBehavior.GrowAndShrink s.Visible = True textFld4.Text = "Country" textFld4.Width = 1000 textFld4.Align = FieldAlignEnum.CenterMiddle textFld4.Height = 400 textFld4.Font.Bold = True textFld4.Font.Size = 10 textFld5.Text = "Total" textFld5.Width = 1000 textFld5.Left = 1000 textFld5.Align = FieldAlignEnum.CenterMiddle textFld5.Height = 400 textFld5.Font.Bold = True textFld5.Font.Size = 10 textFld6.Text = "Sales Representative" textFld6.Width = 2000 textFld6.Left = 2000 textFld6.Align = FieldAlignEnum.CenterMiddle textFld6.Height = 500 textFld6.Font.Bold = True textFld6.Font.Size = 10 textFld7.Text = "Vice President" textFld7.Width = 1500 textFld7.Left = 4000 textFld7.Align = FieldAlignEnum.CenterMiddle textFld7.Height = 400 textFld7.Font.Bold = True textFld7.Font.Size = 10 textFld8.Text = "Sales Manager" textFld8.Width = 1500 textFld8.Left = 5800 textFld8.Align = FieldAlignEnum.CenterMiddle textFld8.Height = 400 textFld8.Font.Bold = True textFld8.Font.Size = 10 Dim isc As New TextField() isc.Text = "Inside Sales Coordinator" isc.Width = 1500 isc.Left = 7500 isc.Align = FieldAlignEnum.CenterMiddle isc.Height = 400 isc.Font.Bold = True isc.Font.Size = 10 isc.Visible = True c1FlexReport1.Sections.PageHeader.Fields.Add(isc) Dim f1 As New Field() f1.Name = "Country" f1.Text = "Country" f1.Left = 80 f1.Top = 0 f1.Width = 1000 f1.Height = 400 61 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms f1.Align = FieldAlignEnum.CenterMiddle f1.MarginLeft = 100 f1.Calculated = True f1.Visible = True f1.BackColor = Color.Transparent f1.Font.Bold = True f1.Font.Size = 10 s.Fields.Add(f1) Dim f7 As New TextField() f7.Name = "RunCount" f7.Text = "=Count(Title)" f7.Left = 1080 f7.Top = 0 f7.Width = 1000 f7.Height = 400 f7.Align = FieldAlignEnum.CenterMiddle f7.MarginLeft = 100 f7.Visible = True f7.Font.Bold = True f7.Font.Size = 10 s.Fields.Add(f7) Dim f8 As New TextField() f8.Name = "SRCount" f8.Text = "=Count(Title, Title = ""Sales Representative"")" f8.Left = 2080 f8.Top = 0 f8.Width = 1000 f8.Height = 400 f8.Align = FieldAlignEnum.CenterMiddle f8.MarginLeft = 100 f8.Visible = True f8.Font.Bold = True f8.Font.Size = 10 s.Fields.Add(f8) Dim f9 As New TextField() f9.Name = "VPCount" f9.Text = "=Count(Title, Title = ""Vice President, Sales"")" f9.Left = 4000 f9.Top = 0 f9.Width = 1000 f9.Height = 400 f9.Align = FieldAlignEnum.CenterMiddle f9.MarginLeft = 100 f9.Visible = True f9.Font.Bold = True f9.Font.Size = 10 s.Fields.Add(f9) Dim f10 As New TextField() f10.Name = "SMCount" f10.Text = "=Count(Title, Title = ""Sales Manager"")" f10.Left = 5800 f10.Top = 0 f10.Width = 1000 f10.Height = 400 f10.Align = FieldAlignEnum.CenterMiddle f10.MarginLeft = 100 62 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms f10.Visible = True f10.Font.Bold = True f10.Font.Size = 10 s.Fields.Add(f10) Dim f11 As New TextField() f11.Name = "ISCCount" f11.Text = "=Count(Title, Title = ""Inside Sales Coordinator"")" f11.Left = 7500 f11.Top = 0 f11.Width = 1000 f11.Height = 400 f11.Align = FieldAlignEnum.CenterMiddle f11.MarginLeft = 100 f11.Visible = True f11.Font.Bold = True f11.Font.Size = 10 s.Fields.Add(f11) c1FlexReport1.Render() End Sub C# Group grp2; private void crossC1Button_Click(object sender, EventArgs e) { btnEmployees.PerformClick(); c1FlexReport1.Sections.Detail.Visible = false; grp2 = c1FlexReport1.Groups.Add("GrpCountry", "Country", SortEnum.Ascending); // 新しいグループのヘッダーセクションを書式設定します c1FlexReport1.Sections.PageHeader.Height = 600; shpfld2.Top = 600; s = grp2.SectionHeader; s.Height = 400; s.AutoHeight = AutoSizeBehavior.GrowAndShrink; s.Visible = true; textFld4.Text = "Country"; textFld4.Width = 1000; textFld4.Align = FieldAlignEnum.CenterMiddle; textFld4.Height = 400; textFld4.Font.Bold = true; textFld4.Font.Size = 10; textFld5.Text = "Total"; textFld5.Width = 1000; textFld5.Left = 1000; textFld5.Align = FieldAlignEnum.CenterMiddle; textFld5.Height = 400; textFld5.Font.Bold = true; textFld5.Font.Size = 10; textFld6.Text = "Sales Representative"; textFld6.Width = 2000; textFld6.Left = 2000; textFld6.Align = FieldAlignEnum.CenterMiddle; textFld6.Height = 500; 63 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms textFld6.Font.Bold = true; textFld6.Font.Size = 10; textFld7.Text = "Vice President"; textFld7.Width = 1500; textFld7.Left = 4000; textFld7.Align = FieldAlignEnum.CenterMiddle; textFld7.Height = 400; textFld7.Font.Bold = true; textFld7.Font.Size = 10; textFld8.Text = "Sales Manager"; textFld8.Width = 1500; textFld8.Left = 5800; textFld8.Align = FieldAlignEnum.CenterMiddle; textFld8.Height = 400; textFld8.Font.Bold = true; textFld8.Font.Size = 10; TextField isc = new TextField(); isc.Text = "Inside Sales Coordinator"; isc.Width = 1500; isc.Left = 7500; isc.Align = FieldAlignEnum.CenterMiddle; isc.Height = 400; isc.Font.Bold = true; isc.Font.Size = 10; isc.Visible = true; c1FlexReport1.Sections.PageHeader.Fields.Add(isc); Field f1 = new Field(); f1.Name = "Country"; f1.Text = "Country"; f1.Left = 80; f1.Top = 0; f1.Width = 1000; f1.Height = 400; f1.Align = FieldAlignEnum.CenterMiddle; f1.MarginLeft = 100; f1.Calculated = true; f1.Visible = true; f1.BackColor = Color.Transparent; f1.Font.Bold = true; f1.Font.Size = 10; s.Fields.Add(f1); TextField f7 = new TextField(); f7.Name = "RunCount"; f7.Text = "=Count(Title)"; f7.Left = 1080; f7.Top = 0; f7.Width = 1000; f7.Height = 400; f7.Align = FieldAlignEnum.CenterMiddle; f7.MarginLeft = 100; f7.Visible = true; f7.Font.Bold = true; f7.Font.Size = 10; s.Fields.Add(f7); TextField f8 = new TextField(); f8.Name = "SRCount"; 64 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms f8.Text = "=Count(Title, Title = \"Sales Representative\")"; f8.Left = 2080; f8.Top = 0; f8.Width = 1000; f8.Height = 400; f8.Align = FieldAlignEnum.CenterMiddle; f8.MarginLeft = 100; f8.Visible = true; f8.Font.Bold = true; f8.Font.Size = 10; s.Fields.Add(f8); TextField f9 = new TextField(); f9.Name = "VPCount"; f9.Text = "=Count(Title, Title = \"Vice President, Sales\")"; f9.Left = 4000; f9.Top = 0; f9.Width = 1000; f9.Height = 400; f9.Align = FieldAlignEnum.CenterMiddle; f9.MarginLeft = 100; f9.Visible = true; f9.Font.Bold = true; f9.Font.Size = 10; s.Fields.Add(f9); TextField f10 = new TextField(); f10.Name = "SMCount"; f10.Text = "=Count(Title, Title = \"Sales Manager\")"; f10.Left = 5800; f10.Top = 0; f10.Width = 1000; f10.Height = 400; f10.Align = FieldAlignEnum.CenterMiddle; f10.MarginLeft = 100; f10.Visible = true; f10.Font.Bold = true; f10.Font.Size = 10; s.Fields.Add(f10); TextField f11 = new TextField(); f11.Name = "ISCCount"; f11.Text = "=Count(Title, Title = \"Inside Sales Coordinator\")"; f11.Left = 7500; f11.Top = 0; f11.Width = 1000; f11.Height = 400; f11.Align = FieldAlignEnum.CenterMiddle; f11.MarginLeft = 100; f11.Visible = true; f11.Font.Bold = true; f11.Font.Size = 10; s.Fields.Add(f11); c1FlexReport1.Render(); } 5. プロジェクトを実行します。[View Cross Tab-Report]ボタンをクリックしてクロス集計レポートを表示します。2 か国の従業員 の役職の内訳が表示されることを確認します。 65 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms データのソート ソートは、データを昇順または降順に整理する方法です。 FlexReport でソートを実行するには、DataSource.SortDefinitions を使用します。 たとえば、従業員の名前のリストを昇順に表示することにします。この場合は、リストを「名(First Name)」でソートする必要がありま す。以下の手順は、従業員リストの名前をアルファベット順にソートする方法を示します。この例では、「FlexReport クイックスタート」 で作成したサンプルを使用します。 1. 2. 3. 4. FlexReport クイックスタートプロジェクトのフォームに、C1Button を追加します。 C1Button の Name を「sortC1Button」に設定し、Text を「Sort Report by Employee First Name」に設定します。 Click イベントを sortC1Button_Click という名前で作成します。 次のコードを追加します。 Visual Studio Private asc As Boolean = True Private Sub sortC1Button_Click(sender As Object, e As EventArgs) Handles Button2.Click If asc Then Dim sd As New SortDefinition("[FirstName]", SortDirection.Ascending) C1FlexReport1.DataSource.SortDefinitions.Add(sd) asc = False Else btnEmployees.PerformClick() asc = True End If C1FlexReport1.Render() End Sub C# bool asc = true; private void sortC1Button_Click(object sender, EventArgs e) { 66 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms if (asc) { SortDefinition sd = new SortDefinition("[FirstName]", SortDirection.Ascending); c1FlexReport1.DataSource.SortDefinitions.Add(sd); asc = false; } else { btnEmployees.PerformClick(); asc = true; } c1FlexReport1.Render(); } 5. レポートをプレビュー表示します。[Employees]ボタンをクリックして、レポートをレンダリングします。 6. [Sort Report by Employee First Name]ボタンをクリックして、レポートのソート結果を表示します。 データのフィルタ処理 特定の条件に基づいてデータの一部だけを表示する場合は、データのフィルタ処理が重要となります。FlexReport で は、DataSource.Filter を使用してデータがフィルタ処理されます。 たとえば、「FlexReport クイックスタート」で作成したレポートで、1 つの Employee ID に対応する従業員詳細を表示することに します。Detail セクションで EmployeeID フィールドが追加されている場所に、次のコードを追加して、'EmployeeID = 2' に対 応する従業員詳細をフィルタ処理します。 Visual Basic C1FlexReport1.DataSource.Filter = "EmployeeID = 2" C# c1FlexReport1.DataSource.Filter = "EmployeeID = 2"; 67 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms プロジェクトを実行します。EmployeeID = 2 の従業員の名前(First name)、姓(Last name)、役職(Title)、およびメモ (Notes)が表示されます。 さまざまな形式へのレポートのエクスポート FlexViewer を使用したエクスポート C1FlexViewer コントロールを使用して、レポートのプレビューやエクスポートを実行できます。レポートは、.pdf、.html、.rtf、 .docx、.xls、.xlsx、.zip、.tiff、.bmp、.png、.jpg、.gif などのファイル形式にエクスポートできます。次のコードは、C1FlexViewer のExport メソッドを使用して、FlexReport をエクスポートする方法を示します。 Visual Basic ' レポート定義をロードします C1FlexReport1.Load(@"reportFile", "reportName") ' ビューアに表示するレポートを指定します C1FlexViewer1.DocumentSource = C1FlexReport1 ' エクスポートします C1FlexViewer1.Export() C# //レポート定義をロードします c1FlexReport1.Load(@"reportFile", "reportName"); //ビューアに表示するレポートを指定します c1FlexViewer1.DocumentSource = c1FlexReport1; //エクスポートします c1FlexViewer1.Export(); FlexReport を使用した PDF へのエクスポート 次のコードは、PdfFilter クラス を使用して、FlexReport をPDFへエクスポートする方法を示します。同様に、レポートを上記の 形式へエクスポートすることもできます。 Visual Basic 68 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ' レポートオブジェクトを作成します Dim C1FlexReport1 As New C1FlexReport() ' レポートをロードします C1FlexReport1.Load("..\..\Report\Report.flxr", "Products Report") C1FlexReport1.Render() ' PdfFilter オブジェクトを作成します Dim filter As New C1.Win.FlexReport.PdfFilter() filter.ShowOptions = False ' エクスポートするファイルのファイル名と保存先のパスを指定します filter.FileName = "Products Report" + "..\..\ProductsReport.pdf" ' レ ポートは ProductsReport.pdf という名前で bin\debug フォルダにエクスポートされます ' エクスポートします C1FlexReport1.RenderToFilter(filter) C# //レポートオブジェクトを作成します C1FlexReport c1FlexReport1 = new C1FlexReport(); //レポートをロードします c1FlexReport1.Load(@"..\..\Report\Report.flxr", "Products Report"); c1FlexReport1.Render(); //PdfFilter オブジェクトを作成します C1.Win.FlexReport.PdfFilter filter = new C1.Win.FlexReport.PdfFilter(); filter.ShowOptions = false; //エクスポートするファイルのファイル名と保存先のパスを指定します filter.FileName = "Products Report" + @"..\..\ProductsReport.pdf"; // レポートは ProductsReport.pdf という名前で bin\debug フォルダにエクスポートされます //エクスポートします c1FlexReport1.RenderToFilter(filter); VBScript の操作 VBScript 式は、レポートのコンテンツを取得、計算、表示、グループ化、ソート、フィルタ、パラメータ化、および書式設定する ためにレポート定義内で広く使用されます。いくつかの式は自動的に作成されます。たとえば、ツールボックスからフィールドを レポートのセクションにドラッグすると、テキストボックスにそのフィールドの値を取得する式が表示されます。ただし、ほとんど の場合、レポートに機能を追加するには独自に式を作成する必要があります。 VBScript の式と文には次の違いがあります。 式は値を返します。これを Field.Text プロパティなどに割り当てることができます。 Field1.Text.Expression = "iif( 1=1, 1+2, 1+3 )" 文は値を返しません。OnFormat などのイベントプロパティに割り当てることができます。次に例を示します。 c1FlexReport.OnOpen = "if 1=1 then msgbox("OK!!!") else msgbox("ooops")" C1FlexReport は VBScript を使用して、計算フィールドの式を評価したり、レポートイベントを処理します。 VBScript は完全な機能を備えた言語で、C1FlexReport の式を記述する際は、VBScript のすべてのメソッドと関数にアクセス できます。VBScript 言語の組み込みの機能については、Microsoft Developer's Network(MSDN)を参照してください。 新しい VBScript エディタでグローバルスクリプトを記述できます。このエディタを使用して、レポート全体からアクセス可能な VBScript の関数やサブルーチンを定義できます。VBScript エディタに直接アクセスするには、F7 を押します。エディタを閉じ 69 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms て変更を保存するには、ショートカット Ctrl+W を使用します。エディタ内で、スクリプトを切り替えたり、フォントや色などのオプ ションを変更することができます。また、構文チェック、定義済み VBScript 関数、再編成されたスクリプト関数などの高度な機 能を使用して、直感的なスクリプティングを簡単に行うことができます。 [VBScript エディタ] エディタ]オプションを使用してグローバルスクリプトを記述するには 1. C1FlexReportDesigner の[ホーム]タブに移動します。 2. [VBScript エディタ] エディタ]をクリックし、次の例のようなグローバルスクリプトを記述します。 function Backcolor() Detail.Backcolor=rgb(255,0,0) end function 次のように、C1FlexReportDesigner の GlobalScripts プロパティを使用してグローバルスクリプトを記述することもできま す。 1. グローバルスクリプトを記述するレポートを選択します。 2. レポートの GlobalScripts プロパティに移動し、省略符をクリックします。これで、[[VBScript エディタ] エディタ]ダイアログボック スが開きます。 3. 上のように、VBScript エディタ エディタでグローバルスクリプトを記述します。 これで、レポート全体から使用できるグローバル関数 'Backcolor()' が定義されます。 70 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms VBScript エディタには、次の追加機能があります。 IntelliSense:VBScript エディタがサポートするスクリプトの自動コード補完プロンプトを提供します。VBScript エディタ の IntelliSense には、次の機能があります。 IntelliSense ウィンドウには、使用可能な語の状況依存リストと共に、VBScript 関数およびキーワードに関する 詳細なヘルプが小さなツールチップまたはヘルプウィンドウに表示されます。詳細ヘルプ内の斜体フォントは、 基本的に、現在の項目が属するカテゴリを示します(VBScript 関数、C1FlexReport 集計スクリプト関数、.NET オブジェクトプロパティなど)。 DataSource.Filter の編集時、エディタは「式エディタ 式エディタ - DataSource.Filter」として開かれ、IntelliSense には、エ ディタで使用できるキーワードまたは関数と、対応するヘルプが表示されます。 IntelliSense エントリに関連付けられているアイコンは、エントリのタイプを示します。アイコンのカラーパレット は、VBScript、レポート組み込み要素、DataSource.Filter によって異なります。 ユーザーがキー入力し、Intellisense ウィンドウが開くと、入力された文字に基づいてリストがフィルタ処理され ます。たとえば、「t」と入力すると、文字「t」を含む語だけが表示され、「te」と入力すると、「te」を含む語にさらに 絞り込まれます。 IntelliSense ウィンドウでバックスペースキーを押すと、最後のフィルタを元に戻します。 角かっこ([)キーを押すと、使用可能なデータベースフィールドのリストが表示されます。 レポート、フィールド、セクションなどのオブジェクトの名前の後にピリオド(.)キーを押すと、そのオブジェクトで 使用できる .NET プロパティが表示されます。 [Ctrl]+[J]キー、[Ctrl]+[Space]キー、または文字以外のキーの後に文字キーを押すと、使用可能な VBScript 関数、キーワードなどのリストが状況に応じて表示されます。 分割ウィンドウ 分割ウィンドウ:同じ VBScriptEditor 内で 2 つの同じまたは異なるスクリプトを表示または記述できます。デフォルトで は、VBScript エディタは単一ウィンドウで開きます。 分割ウィンドウに切り替えるには 分割ウィンドウモードに切り替えるには、分割ウィンドウグリフをクリックして下へドラッグすると、上部にもう 1 つエディ タが開きます。ウィンドウのサイズは、ウィンドウ間の分割線をドラッグして変更できます。 単一ウィンドウに戻るには ウィンドウの右上隅にある[x]グリフをクリックすると、上側のウィンドウが閉じられ、分割モードがオフになり、下側の ウィンドウがズームアウトします。リボンボタンの有効/無効の状態は、現在のウィンドウによって決まります。現在の ウィンドウは、薄緑のキャプションバーで示されます。分割ウィンドウモードには、次の追加機能があります。 [F6]]キーを押すと、2 つのウィンドウを切り替えることができます。 分割ウィンドウグリフまたは分割線を上側のウィンドウの上部までドラッグすると、分割ウィンドウモードの上側 のウィンドウを非表示にできます。 VBScript エディタ エディタの[グローバルスクリプト] [グローバルスクリプト]ドロップダウンは、以前にレポートでグローバルスクリプトを定義した場合に のみ有効になります。 C1FlexReport は、追加のオブジェクト、変数、および関数を公開することで、VBScript を拡張します。以下のセクションでは、 これらの拡張機能について説明します。 VBScript の要素、オブジェクト、変数 次の表に、VBScript の要素、オブジェクト、および変数を示します。 演算子 次の表に、VBScript の演算子を一覧します。 演算子 説明 And 2 つの式の論理積を実行します。 Or 2 つの式の論理和を実行します。 71 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 演算子 説明 Not 式の否定を求めます。 Mod 2 つの数値で割り算を実行し、余りだけを返します。 予約シンボル 次の表に、VBScript の予約シンボルとそれらの使用方法を一覧します。 キーワード 説明 True True キーワードは、-1 と等しい値を持ちます。 False False キーワードは、0 と等しい値を持ちます。 Nothing 実オブジェクトからオブジェクト変数の関連付けを解除します。オブジェクト変数に Nothing を割り当てるには、Set 文を使用します。たとえば、Set MyObject = Nothing とします。複数のオブジェクト変数が同じ実オブジェクトを参照している場 合があります。1 つのオブジェクト変数に Nothing を割り当てた場合、その変数は 実オブジェクトを参照しなくなります。複数のオブジェクト変数が同じオブジェクトを参 照している場合、それらの変数が参照するオブジェクトに関連付けられているメモリ およびシステムリソースは、Set を使用することで明示的に、または最後のオブジェク ト変数が Nothing に設定されることで暗黙的に、すべての変数が Nothing に設定 された後でのみ解放されます。 Null Null キーワードは、変数に有効なデータが含まれていないことを示すために使用さ れます。 vbCr 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbCrLf 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbLf 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbFormFeed 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbNewLine 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbNullChar 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbTab 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbVerticalTab 印刷および表示機能を呼び出す際に、コード内で実際の値の代わりに次の定数を使 用できます。 vbBlack 黒色。値 = 0x0 vbRed 赤色。値 = 0xFF vbGreen 緑色。値 = 0xFF00 vbYellow 黄色。値 = 0xFFFF vbBlue 青色。値 = 0xFF0000 72 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms キーワード 説明 vbMagenta マゼンタ。値 = 0xFF00FF vbCyan シアン。値 = 0xFFFF00 vbWhite 白色。値 = 0xFFFFFF 組み込み関数 VBScript の組み込み関数を次の表に一覧します。 Abs Date Iif Minute Sign Acos DateAdd InputBox Month スペース Asc DateDiff InStr MonthName Sqr Asin DatePart InStrRev MsgBox StrComp Atn DateSerial Int Now String CBool DateValue IsDate Oct Tan CByte Day IsEmpty Pi Time CCur Exp IsNull Replace Timer CDate Fix IsNumeric RGB TimeSerial CDbl Format IsObject Right TimeValue Chr FormatCurrency LCase Rnd Trim CInt FormatDateTime Left Round TypeName CLng FormatNumber Len RTrim UCase Cos FormatPercent Log Second WeekDay CSng Hex LTrim Sgn WeekDayName CStr Hour Mid Sin Year VBScript 関数の詳細については、MSDN のドキュメントを参照してください。 C1FlexReport は、VBScript の次の主要機能をサポートしています。 集計関数(Sum、Average、StDev、Var、Count など) レポートフィールド名とデータベースフィールド名 Page/Pages 変数 レポートオブジェクト 文字列関数(Chr、Format など) データ変換(CBool、CByte など) 算術関数(cos、sin など) 日付/時刻関数(DateAdd、Hour など) Function および Sub 条件文 組み込み関数(Like および In) 組み込みスクリプト関数 Like と In は、SQL 演算子 LIKE と IN と同様の機能を備え、True または False を返します。 Like(str, template):str を template と比較します。template にはワイルドカード「%」を使用できます。Like 関数の例を次にい くつか示します。 73 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Like("abc", "%bc") は true を返します。 Like("abc", "%bcd") は false を返します。 Like("abc", "ab%") は true を返します。 Like("abc", "abd%") は false を返します。 Like("abc", "%b%") は true を返します。 Like("abc", "%d%") は false を返します。 Like("abc", "abc") は true を返します。 Like("abc", "abcd") は false を返します。 Like("Abc", "abc") は false を返します。 In(obj, obj1, ... objN):obj がオブジェクト obj1、...、objN の中にあるかどうかをテストします。In 関数の例を次にいくつか示し ます。 In(1, 1, 2, 3) は true を返します。 In(1, 2, 3) は false を返します。 In("a", "a", "b", "c") は True を返します。 In("a", "b", "c") は False を返します。 In("A", "a", "b", "c") は False を返します。 このように、どちらの関数も大文字と小文字が区別されるので、abc と Abc は同じではありません。 C1FlexReport では、次の VBScript 関数がサポートされていません サポートされていません。 Arrays Select/Case 文 文のキーワード VBScript 文のキーワードを次の表に一覧します。 If ElseIf To While Dim Then EndIf Next Wend Redim Else For Step Const レポートのフィールド名 Field オブジェクトの名前は、評価されると、オブジェクトの参照を返します。これにより、フィールドのプロパティにアクセスでき ます。Field オブジェクトのデフォルトプロパティは Value なので、フィールド名自体はフィールドの現在の値を返します。次に例 を示します。 MyField.BackColor = RGB(200,250,100) MyField.Font.Size = 14 MyField * 2 ' (MyField.Value * 2 と同じ) メモ: レポートフィールドにデータベースフィールドと同じ名前を付けると、そのレポートフィールドにアクセスできなくなり ます。 レポートのセクション名 Section オブジェクトの名前は、評価されると、オブジェクトの参照を返します。これにより、セクションのプロパティにアクセスで きます。Section オブジェクトのデフォルトのプロパティは Name です。次に例を示します。 If Page = 1 Then [Page Footer].Visible = False データベースフィールド名 レポートのデータセットソース内のフィールド名は、評価されると、現在のフィールドの値を返します。フィールド名にスペースま たはピリオドが含まれる場合は、フィールド名を角かっこで囲む必要があります。次に例を示します。 74 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms OrderID UnitsInStock [Customer.FirstName] [Name With Spaces] レポート変数 Page Page 変数は、Page プロパティの値を取得または設定します。このプロパティは、レポートのレンダリングの開始時にコント ロールによって初期化され、ページ区切りごとに 1 ずつ増加します。コードを使用してこの値をリセットできます。次に例を示し ます。 If Country <> LastCountry Then Page = 1 LastCountry = Country Pages Pages 変数は、レポートのレンダリングの終了時に総ページ数に置き換えられるトークンを返します。読み取り専用のプロパ ティで、通常は、ページのヘッダーフィールドまたはフッターフィールドで使用されます。次に例を示します。 "ページ " & Page & " / " & Pages レポートオブジェクト レポートオブジェクトは、コントロールオブジェクトへの参照を返します。これにより、スクリプトや式から C1FlexReport オブジェ クトモデル全体にアクセスできます。次に例を示します。 "フィールド:" & Report.Fields.Count Cancel Cancel を True に設定すると、レポートのレンダリング処理をキャンセルできます。次に例を示します。 If Page > 100 Then Cancel = true 互換性のための関数: 互換性のための関数:Iif および Format Visual Basic や Microsoft Access(VBA)で記述されたコードとの互換性を高めるために、C1FlexReport は、VBScript にはな い Iif および Format という 2 つの関数を公開しています。 Iif は、ブール式を評価し、その結果に基づいて 2 つの値のうちの 1 つを返します。次に例を示します。 Iif(SalesAmount > 1000, "Yes", "No") Format は、書式設定式に含まれる指定に従って、値を書式設定された文字列に変換します。この値には、数字、ブール値、 日付、または文字列を使用できます。書式は、Visual Basic または VBA で使用される書式文字列に似た構文で、文字列とし て構築されます。 次の表で、書式文字列に使用される構文について説明します。 値の型 書式文字列 説明 Number Percent、% 数値をパーセント値として書式設定します(小数点以下は 0 または 2 桁)。 例:Format(0.33, "Percent") = "33%" Format(0.3333333, "Percent") = "33.33%" #,###.##0 マスクを使用して数値を書式設定します。認識される記号は、#(桁のプレー スホルダ)、0(常に表示される桁のプレースホルダ)、,(桁区切り)、()(負の値 を囲む)、%(パーセント値として書式設定)です。例:Format(1234.1234, "#,###.##") = "1,234.12" 75 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 値の型 書式文字列 説明 Format(-1234, "#.00") Format(.1234, "#.##") Format(.1234, "0.##") Format(.3, "#.##%") = = "(1234.12)" = ".12" = "0.12" "30.00%" Currency Currency、$ 数値を通貨値として書式設定します。必要に応じて桁区切りを付けて数値を 表示します。小数点以下を 2 桁で表示します。例:Format(1234, "$") = "$1,234.00" Boolean Yes/No Yes または No を返します。 Date Long Date Format(#12/5/1#, "long date") = "December 5, 2001" Short Date Format(#12/5/1#, "short date") = "12/5/2001" Medium Date Format(#12/5/1#, "medium date") = "05-Dec-01" q,m,d,w,yyyy 日付の一部(四半期、月、月通算日、年通算週、年)を返します。 例:Format(#12/5/1#, "q") = "4" @@-@@/@@ マスクを使用して文字列を書式設定します。@ 文字は、1 文字(@ が 1 つだ けの場合は、値文字列全体)のプレースホルダです。その他の文字はリテラ ルとして扱われます。例:Format("AC55512", "@@-@@@/@@") = "AC-555/12" Format("AC55512", "@") = "AC55512" @;Missing 値が null または空文字列ではない場合は、セミコロン(;)の左側の書式文字 列を使用します。null または空文字列の場合は、セミコロン(;)の右側の部分 を返します。例:Format("@;Missing", "UK") = "UK" Format("@;Missing", "") = "Missing" String VBScript には、独自の組み込み書式設定関数(FormatNumber、FormatCurrency、FormatPercent、FormatDateTime など)があります。ここで説明した VBA スタイルの Format 関数の代わりに、これらの関数を使用することもできます。 集計関数 集計関数は、レンダリングされるグループのデータをまとめるために使用されます。レポートヘッダーフィールドで使用すされた 集計関数は、データセット全体の集計値を返します。グループのヘッダーまたはフッターで使用された集計関数は、そのグ ループの集計値を返します。 FlexReport の集計関数はすべて、次の 2 つの引数を受け取ります。 グループ全体で集計される VBScript 式を含む文字列。 フィルタ(ドメイン集計)として使用される VBScript 式を含む文字列(オプション)。フィルタ式は、各値が集計される前に 評価されます。フィルタが False を返すと、その値はスキップされて、集計結果に含まれません。 FlexReport では、次の集計関数が定義されています。 関数 説明 Avg 現在のグループ内の式の平均値。たとえば、次の式は、グループ全 体の平均売上高と特定の製品の平均売上高を計算しま す。Avg(SalesAmount) Avg(SalesAmount, ProductType = 3) Sum グループ内のすべての値の合計。 76 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 関数 説明 Count グループ内で null 以外の値を持つレコードの数。式にアスタリスク (*)を使用すると、すべてのレコードを数えることができます。たとえ ば、次の式は、住所の値が有効な(null ではない)従業員の数と従 業員の総数をカウントします。Count(Employees.Address) Count(*) CountDistinct グループ内で null 以外の値を持つレコードの数(重複する値は数 えない)。 Min、Max 式の最小値および最大値。例:"Max Sale = " & Max(SaleAmount) Range 式の最小値と最大値の範囲。 StDev、Var 現在のグループ内の式の標準偏差および分散。SQL や Microsoft Excel と同様に、標本(n-1)の式を使用して値が計算されます。 StDevP、VarP 現在のグループ内の式の標準偏差および分散。SQL や Microsoft Excel と同様に、母集団(n)の式を使用して値が計算されます。 Median グループ内の値のメジアン(中央値)を返します。 Mode グループ内の値のモード(最頻値)を返します。 集計関数を使用するには、ヘッダーセクションまたはフッターセクションに計算フィールドを追加し、フィールドの Text プロパ ティに式を割り当てます。 たとえば、NWind.xml サンプルファイルの "Employee Sales by Country" レポートには、複数の集計フィールドが含まれま す。このレポートは、レコードを国別および従業員別にグループ化します。 Employee グループのフッターセクションにある SalespersonTotal フィールドには、次の式が含まれています。 =Sum([SaleAmount]) このフィールドは Employee グループのフッターにあるため、この式は、従業員別の総売上高を返します。 CountryTotal フィールドと GrandTotal フィールドにも、まったく同じ式が含まれます。しかし、これらのフィールドはそれぞ れ、Country グループのフッターおよびレポートフッターにあるため、式は国別の総売上高およびレコードセット全体の売上高 を返します。 グループ内から上位レベルの集計値を参照する場合があります。たとえば、"Employee Sales by Country" レポートには、国 別の売上高を総売上高に対する割合(%)で表示するフィールドがあります。Country グループ内で計算されるすべての集計 値は、現在の国を参照するため、この割合を直接計算することはできません。その代わり、PercentOfGrandTotal フィールド では次の式を使用します。 =[CountryTotal]/[GrandTotal] CountryTotal と GrandTotal はそれぞれ、Country フッターセクションとレポートフッターセクションにあるフィールドです。し たがって、CountryTotal は国別の合計値を、GrandTotal はレコードセット全体の合計値を保持します。 コントロールがレコードセット全体のデータを調べる必要があるため、集計関数の評価には時間がかかることをよく理解する必 要があります。そのため、集計関数は、できる限り少数の計算フィールドでのみ使用してください。これで他のフィールドでは、 集計式を再度評価するのではなく、集計関数を使用するフィールドから集計値を直接読み取ることができます。 たとえば、NorthWind データベースの "Employee Sales by Country" レポートには、各売上高を国別の総売上高に対する割 合(%)で表示する詳細フィールド PercentOfCountryTotal があります。このフィールドには、次の式が含まれています。 =[SaleAmount]/[CountryTotal] SaleAmount は、レコードセットフィールドへの参照で、各詳細レコードごとに値が変化します。CountryTotal は、集計関数 を含むレポートフィールドへの参照です。コントロールは、この式を評価する際に、レポートフィールドから直接集計値を取得し 77 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ます。集計の再計算は行いません。 レポートの完全なサンプルについては、ComponentOne Samples フォルダにある Nwind.xml レポート定義ファイルの 「Employee Sales by Country」レポートを参照してください。 FlexReport オブジェクトの分割の管理 レポートの作成はデータの表示方法が鍵なので、各オブジェクトをその高さと幅に応じて体裁よく表示することが重要です。 FlexReports では、セクションやサブセクションをページ間で分割するかどうかを設定できます。それには、SplitBehavior プロ パティを SplitIfNeeded または KeepTogether に設定します。同様に、フィールドや境界線の分割を SplitHorzBehavior プロパティと SplitVertBehavior プロパティで制御します。 次のコードは、セクションとサブセクションの SplitBehavior を設定します。 Visual Studio ' 必要に応じてセクションを分割できるようにします C1FlexReport1.Sections.Header.SplitBehavior = SplitBehavior.SplitIfNeeded ' 必要に応じてサブセクションを分割できるようにします C1FlexReport1.Sections.Header.SubSections(0).SplitBehavior = SplitBehavior.SplitIfNeeded C# // 必要に応じてセクションを分割できるようにします c1FlexReport1.Sections.Header.SplitBehavior = SplitBehavior.SplitIfNeeded; // 必要に応じてサブセクションを分割できるようにします c1FlexReport1.Sections.Header.SubSections[0].SplitBehavior = SplitBehavior.SplitIfNeeded; フィールドの変更 VBScript は、計算フィールドで式を評価する場合にのみ使用できるわけではありません。レポートのレンダリング時に実行さ れるスクリプトを指定することもできます。このようなスクリプトを使用して、レポートの書式設定を変更できます。これらのスク リプトは、イベントプロパティに置かれます。イベントプロパティは Visual Basic のイベントハンドラに似ていますが、レポートを 表示するアプリケーションのスコープではなく、レポートのスコープ内でスクリプトが実行される点が異なります。 たとえば、イベントプロパティを使用すると、フィールドの Font プロパティや ForeColor プロパティをフィールドの値に基づい て設定できます。この動作は、レポート自体に組み込まれ、レンダリングに使用されるアプリケーションに関係なく保持されま す。 もちろん、従来のイベントも使用できます。従来のイベントは、レポートではなくアプリケーションに影響を及ぼす動作を実装す るために使用します。たとえば、StartPage イベントのハンドラを記述して、レンダリングされているレポートに関係なく、アプリ ケーションでページ数を更新できます。 次の表に、使用できるイベントプロパティと、その一般的な使用方法を示します。 78 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms オブジェクト プロパティ 説明 C1FlexReport OnOpen レポートがレンダリングを開始すると実行されます。ConnectionString プロパティや RecordSource プロパティを変更したり、VBScript の変数を初期化するために使用 できます。 OnClose レポートがレンダリングを終了すると実行されます。クリーンアップ作業を実行するた めに使用できます。 OnNoData レポートのレンダリングが開始されたが、ソースレコードセットが空の場合に実行され ます。Cancel プロパティを True に設定して、レポートの生成を中止できます。ダイ アログボックスを表示して、レポートが表示されない理由をユーザーに知らせること もできます。 OnPage 新しいページが開始されると実行されます。さまざまなフィールドのセクションの Visible プロパティを状況に応じて設定するために使用できます。コントロールは、新 しいページが開始されるたびに自動的に 1 ずつ増える Page 変数を保持していま す。 OnError エラーが発生すると実行されます。 OnFormat セクション内のフィールドが評価される前に実行されます。この時点で、ソースレコー ドセット内のフィールドには、これからレンダリングされる値が反映されていますが、 レポートフィールドには反映されていません。 OnPrint セクション内のフィールドが印刷される前に実行されます。この時点で、フィールドの 評価は終了しており、条件付き書式設定を実行できます。 Section 以下のトピックでは、これらのプロパティの一般的な使用例を示します。 値に応じたフィールドの書式設定 値に応じたフィールドの書式設定は、おそらく最も一般的な Section.OnPrint プロパティの使用方法です。製品別に注文数を グループ化してリストするレポートを例にします。別のフィールドを使用して在庫数を表示する代わりに、追加注文レベルに満 たない製品の名前を赤色の太字で強調表示することにします。 コードを使用して、追加注文レベルに満たない製品を強調表示するには 追加注文レベルに満たない製品の名前を赤色の太字で強調表示するには、次のようなイベントスクリプトを使用します。 Visual Basic Dim script As String = _ "If UnitsInStock < ReorderLevel Then" & vbCrLf & _ "ProductNameCtl.ForeColor = RGB(255,0,0)" & vbCrLf & _ "ProductNameCtl.Font.Bold = True" & vbCrLf & _ "Else" & vbCrLf & _ "ProductNameCtl.ForeColor = RGB(0,0,0)" & vbCrLf & _ "ProductNameCtl.Font.Bold = False" & vbCrLf & _ "End If" C1Flexreport.Sections.Detail.OnPrint = script C# string script = "if (UnitsInStock& ReorderLevel) then\r\n" + 79 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms "ProductNameCtl.ForeColor = rgb(255,0,0)\r\n" + "ProductNameCtl.Font.Bold = true\r\n" + "else\r\n" + "ProductNameCtl.ForeColor = rgb(0,0,0)\r\n" + "ProductNameCtl.Font.Bold = false\r\n" + "end if\r\n"; c1FlexReport1.Sections.Detail.OnPrint = script; FlexReportDesigner を使用して、追加注文レベルに満たない製品を強調表 示するには コードを記述する代わりに、C1FlexReportDesigner アプリケーションを使用して、詳細セクションの Section.OnPrint プロパ ティの VBScript エディタに、次のスクリプトコードを直接入力できます。次の手順を実行します。 1. Designer のプロパティペインのドロップダウンリストから、[詳細] [詳細]を選択します。これで、セクションで使用できるプロパ ティが表示されます。 2. Section.OnPrint プロパティの横にある空のボックスをクリックし、ドロップダウン矢印をクリックして、リストから[式エ [式エ ディタ] ディタ]を選択します。VBScript エディタ エディタウィンドウが表示されます。 3. VBScript エディタ エディタウィンドウで、次のスクリプトを入力します。 If UnitsInStock < ReorderLevel Then ProductNameCtl.ForeColor = RGB(255,0,0) ProductNameCtl.Font.Bold = True Else ProductNameCtl.ForeColor = RGB(0,0,0) ProductNameCtl.Font.Bold = False End If 4. [OK]]をクリックして、エディタを閉じます。 コントロールは、このセクションを出力するたびに、この VBScript コードを実行します。スクリプトは、"ReorderLevel" データ ベースフィールドの値を取得し、その値に基づいて、"ProductName" レポートフィールドの Field.Font.Bold プロパティと Field.ForeColor プロパティを設定します。在庫が追加注文レベルに満たない製品は、製品名が赤色の太字になります。 次のスクリーンショットは、特別な効果が適用されたレポートのセクションです。 80 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms データがないセクションの非表示 詳細セクションの OnFormat プロパティに式を指定することで、データに基づいてレポートフィールドの書式を変更できます。 たとえば、詳細セクションに画像コントロールを含むフィールドがあるが、レコードに画像データが存在しない場合に、そのレ コードを非表示にできます。データ(この例では、レコードの画像)が存在しない場合に詳細セクションを非表示にするには、詳 細セクションの OnFormat プロパティに次のスクリプトを追加します。 If isnull(PictureFieldName) Then Detail.Visible = false Else Detail.Visible = true End If コードを使用して、データが存在しないセクションを非表示にするには データが存在しないセクション(この例では、レコードの画像)を非表示にするには、次のようなイベントスクリプトを使用しま す。 Visual Basic 81 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms C1FlexReport1.Sections.Detail.OnFormat = "Detail.Visible = notisnull(PictureFieldName)" C# c1FlexReport1.Sections.Detail.OnFormat = "Detail.Visible = notisnull(PictureFieldName)"; FlexReportDesigner を使用して、データが存在しないセクションを非表示に するには コードを記述する代わりに、C1FlexReportDesigner を使用して、詳細セクションの OnFormat プロパティの VBScript エディ タに、次のスクリプトコードを直接入力できます。次の手順を実行します。 1. Designer のプロパティペインのドロップダウンリストから、[詳細] [詳細]を選択します。これで、セクションで使用できるプロパ ティが表示されます。 2. Section.OnFormat プロパティの横にある空のボックスをクリックし、ドロップダウン矢印をクリックして、リストから[式 [式 エディタ] エディタ]を選択します。VBScript エディタ エディタウィンドウが表示されます。 3. VBScript エディタ エディタで、次の作業を実行します。 ウィンドウに次のスクリプトを入力します。 If isnull(PictureFieldName) Then Detail.Visible = false Else Detail.Visible = true End If または、簡潔なスクリプトを使用することもできます。 Detail.Visible = not isnull(PictureFieldName) 値に基づいたフィールドの表示 値に基づいたフィールドの表示/非表示 非表示 フィールドの書式を変更してフィールドのコンテンツを強調表示する代わりに、別のフィールドの Visible プロパティを True ま たは False に設定することで、特別な効果を生成することができます。たとえば、製品名を囲む「Shapefld」という名前の新し い図形フィールドを挿入し、その Visible プロパティを True に設定する場合は、スクリプトを次のように記述します。 If UnitsInStock < ReorderLevel Then Shapefld.Visible = True Else Shapefld.Visible = False End If コードを使用して、追加注文レベルに満たない製品を強調表示するには 追加注文レベルに満たない製品にボックスを表示して強調表示するには、次のようなイベントスクリプトを使用します。 Visual Basic Dim script As String = _ "If UnitsInStock < ReorderLevel Then" & vbCrLf & _ " BoxCtl.Visible = True" & vbCrLf & _ 82 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms "Else" & vbCrLf & _ " BoxCtl.Visible = False" & vbCrLf & _ "End If" C1FlexReport1.Sections.Detail.OnPrint = script C# string script = "if (UnitsInStock < ReorderLevel) then\r\n" + "BoxCtl.Visible = true\r\n" + "else\r\n" + "BoxCtl.Visible = false\r\n" + "end if\r\n"; c1FlexReport1.Sections.Detail.OnPrint = script; このコードは、VBScript イベントハンドラを含む文字列を作成し、それをセクションの OnPrint プロパティに割り当てます。 FlexReportDesigner を使用して、追加注文レベルに満たない製品を強調表 示するには コードを記述する代わりに、C1FlexReportDesigner アプリケーションを使用して、詳細セクションの OnPrint プロパティの VBScript エディタに、次のスクリプトコードを直接入力できます。次の手順を実行します。 1. Designer のプロパティペインのドロップダウンリストから、[詳細] [詳細]を選択します。これで、セクションで使用できるプロパ ティが表示されます。 2. OnPrint プロパティの横にある省略符をクリックして、VBScript エディタ エディタを開きます。 3. VBScript エディタ エディタで、次のスクリプトを入力するだけです。 If UnitsInStock < ReorderLevel Then Shapefld.Visible = True Else Shapefld.Visible = False End If 次のスクリーンショットは、特別な効果が適用されたレポートのセクションです。 83 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ページカウンタのリセット C1FlexReport.Page 変数は、コントロールによって作成されて自動的に更新されます。ページのヘッダーまたはフッターに ページ数を追加する場合に便利です。新しいグループの先頭で、ページカウンタをリセットするとよい場合があります。たとえ ば、レコードを国別にグループ化しているレポートがあるとします。コードを追加するか、デザイナを使用して、ページカウンタを リセットできます。 コードを使用する場合 新しいグループ(新しい国など)の先頭でページカウンタをリセットするには、PageFooter フィールドの Text プロパティを設定 します。次のコードを入力します。 Visual Basic C1FlexReport1.Fields("PageFooter").Text = "[ShipCountry] & "" "" & [Page]" C# 84 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms C# c1FlexReport1.Fields["PageFooter"].Text = "[ShipCountry] + [Page]"; FlexReportDesigner を使用する場合 新しいグループ(新しい国など)の先頭でページカウンタをリセットするには、次の手順に従って、PageFooter フィールドの Text プロパティを設定します。 1. PageFooter のページ番号フィールドをデザイナのプロパティペインのドロップダウンリストから選択するか、設計ペイン で選択します。これで、このフィールドのプロパティが表示されます。 2. Text プロパティの横にあるボックスをクリックし、ドロップダウン矢印をクリックして、リストから[式エディタ] [式エディタ]を選択しま す。VBScript エディタ エディタウィンドウが表示されます。 3. VBScript エディタ エディタで、次のスクリプトを入力します。 ="Page " & GroupPage(0) & " of " & GroupPages(0) & " for " & Country 4. [OK]]をクリックして、エディタを閉じます。 サブセクションの追加 サブセクションは、レポートの任意のセクションに挿入できる追加セクションです。「FlexReport のセクション」で説明するよう に、通常、FlexReport には、詳細、ヘッダー、フッター、ページヘッダー、ページフッター、グループヘッダー、およびグループ フッターセクションが含まれます。 これらのセクションには、それぞれ少なくとも 1 つのサブセクションが含まれますが、1 つのセクションに必要な数だけサブセク ションを追加できます。 レポートのヘッダーセクションに 1 つのサブセクションを追加するには、次のコードを使用します。 Visual Studio 'ヘッダーセクションに 1 つのサブセクションを作成します Dim ss As SubSection = C1FlexReport1.Sections.Header.SubSections.Add() '高さを 10 mm に設定します ss.Height = 10 * 1440 / 25.4 C# //ヘッダーセクションに 1 つのサブセクションを作成します SubSection ss = rep.Sections.Header.SubSections.Add(); // 高さを 10 mm に設定します ss.Height = 10 * 1440 / 25.4; 85 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReportDesigner の操作 FlexReportDesigner は、FlexReport を設計するためのスタンドアロンアプリケーションです。Microsoft Access のレポートデ ザイナに似ています。このデザイナのデフォルトの場所は C:\Program Files (x86)\ComponentOne\Apps\v4.0\C1FlexReportDesigner.exe です。この場所で次のような二つのデザイナーのアプリケー ションがあります。 C1FlexReportDesigner.4.exe は「Any CPU」を対象で実装されていますので、アプリケーションは64ビットのシステム の場合は64ビットモードと32ビットのシステムの場合は32ビットモードで実行します。このアプリケイションは、 Microsoft.Jet.OLEDB.4.0などのような32ビットのみのデータプロバイダをサポートしません。 C1FlexReportDesigner32.4.exe はx86 を対象し、Microsoft.Jet.OLEDB.4.0などのような32ビットのみのデータプロ バイダを使用できます。 基本レポート定義ファイルを作成し、そのレポート定義を変更、印刷、およびエクスポートできます。以下のすべてのトピック は、FlexReportDesigner アプリケーションについて説明しています。 FlexReportDesigner について FlexReportDesigner アプリケーションは、C1FlexReport レポート定義ファイルを作成および編集するためのツールです。こ のデザイナを使用して、C1Report コンポーネントで読み込めるファイル(FLXR)を作成、編集、ロード、および保存することがで きます。Microsoft Access ファイル(.mdb)や Crystal Reports(.rpt)からレポート定義をインポートすることもできます。 デザイナを実行するには、64 ビットプラットフォームの場合はC1FlexReportDesigner.exe と32 ビットプラットフォームの場合 はC1FlexReportDesigner32.4.exe ファイルをダブルクリックします。このファイルは、デフォルトで次のパスに存在します。 C:\Program Files (x86)\ComponentOne\Apps\v4.0 このディレクトリはデフォルトのインストールパスに基づいていますが、インストールパスを変更した場合は、パスが異なる場合 があります。 FlexCommonTasks.flxr ファイルを開いたときに表示されるデザイナを次に示します。 86 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Designer のメインウィンドウには、次のコンポーネントがあります。 [ファイル]メニュー [ファイル]メニュー:レポート定義ファイルを処理(ロード、保存、インポート、エクスポートなど)するための 情報が含まれます。 [ホーム]、[挿入]、[調整]、[ページ設定]の各タブ [ホーム]、[挿入]、[調整]、[ページ設定]の各タブ:レポート定義に関連するすべての機能(編集、書式設 定、フィールド/セクションの挿入、配置/サイズ設定、ページレイアウト、プリンタ設定など)を提供します。 設計モード 設計モード:[編集]、[テキスト]、[データ]などのメニュー機能へのショートカットを提供します。デフォルトで は、[ホーム]、[挿入]、[調整]、および[ページ設定]タブで構成される設計モードが選択されます。 プレビューモード プレビューモード:レポートのプレビューを提供します。詳細については、「プレビューモード」を参照してくだ さい。 [レポート]タブ [レポート]タブ:現在のレポート定義ファイルに含まれるすべてのレポートを一覧します。レポート名をダブ ルクリックして、レポートをプレビューまたは編集できます。このリストを使用してレポートを名前変更、コ ピー、削除することもできます。 [データ]タブ [データ]タブ:現在のレポート内のすべてのデータソースおよびパラメータを一覧します。このタブで、データ ソースやパラメータの追加や編集を行うことができます。 [プロパティ]タブ [プロパティ]タブ:デザイナで選択したオブジェクトのプロパティを編集できます。 「エラー」タブ 「エラー」タブ: レポートをインポートやプレビューするときに発生するエラーと警告を表示するエラータブ。 87 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ステータスバー ステータスバー:デザイナで現在実行中の作業に関する情報が表示されます。フィールドが選択されている 場合、ステータスバーには、選択されているフィールドの名前、タイプ、およびデータ連結フィールド(計算 フィールド)/静的フィールドの別が表示されます。セクションが選択されている場合、ステータスバーには、 セクション名、セクションタイプ、およびセクションの表示状態(非表示かどうか)が表示されます。ロード、保 存、印刷、レンダリング、インポートなどの処理も表示されます。ステータスバーの右にあるズームスライダ をドラッグして、選択したレポートをズームアウト/ズームインすることができます。 折りたたみ 折りたたみ/展開グリフ 展開グリフ:各セクションで、展開グリフ( )または折りたたみグリフ( )をクリックすることで、 セクション内に含まれているサブセクションを展開または折りたたむことができます。 データベースアイコン データベースアイコン:フィールドの右上隅にデータベースアイコンが表示されている場合は、フィールドが データソースに連結されている(計算フィールド)ことを示します。データベースアイコンが表示されていない フィールドは、静的フィールドです。 スナップライン スナップライン:フィールドの配置に役立ちます。フィールドのサイズが拡大または縮小されると、垂直およ び水平方向のスナップラインが表示され、フィールドを相互に相対的に配置するために役立ちます。 サブセクション サブセクション:サブセクションは、セクション内に含まれるセクションです。サブセクションは、デフォルトで は、セクションの下部に表示され、「/<B>」、「/<C>」のように自動的に名前が付けられます。 ヘルプボタン ヘルプボタン:オンラインヘルプファイルを開いたり、アプリケーションに関する情報を表示するバージョン情 バージョン情 報画面を表示するオプションを提供します。 以下のトピックでは、C1FlexReportDesigner アプリケーションを使用してレポート定義ファイルを作成、編集、使用、および保 存する方法について説明します。 [ファイル]メニュー [ファイル] [ファイル]メニューは、レポート定義ファイルのロードと保存、およびレポート定義のインポートとエクスポートを行うための ショートカットを提供します。[ファイル] [ファイル]メニューから、C1FlexReportDesigner アプリケーションのオプションにもアクセスでき ます。 次の図に、[ファイル] [ファイル]メニューを示します。 88 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms メニューには、次のオプションがあります。 新規作成 新規作成:新しいレポート定義ファイルを作成します。 開く 開く:[レポート定義ファイルを開く] [レポート定義ファイルを開く]ダイアログボックスを表示します。ここで、既存のファイルを選択して開くことができ ます。 閉じる 閉じる:現在のレポート定義ファイルを閉じます。 保存 保存:以前に保存した場所に、レポート定義ファイルを保存します。 名前を付けて保存 名前を付けて保存:[レポート定義の保存] [レポート定義の保存]ダイアログボックスを開きます。ここで、レポート定義を .flxr ファイルとして保 存できます。 印刷 印刷:現在のレポートを印刷します。[印刷] [印刷]ボタンは、C1FlexReportDesigner アプリケーションがプレビューモードの 場合にのみ有効になります。 インポート インポート:[レポート定義のインポート] [レポート定義のインポート]ダイアログボックスを表示します。ここで、Microsoft Access(.mdb および .adp)ファイルや Crystal Reports(.rpt)ファイルをインポートできます。詳細については、「Microsoft Access レポートの インポート」と「Crystal Reports のインポート」を参照してください。 エクスポート エクスポート:現在のファイルを HTML、PDF /A、PDF、RTF、DOCX、XLS、XLSX、TIFF、BMP、PNG、JPG、ZIP、または GIF としてエクスポートします。詳細については、「レポートのエクスポートと公開」を参照してください。 最近使用したファイル 最近使用したファイル:最近開いたレポート定義ファイルをリストします。ファイルを再度開くには、リストから選択しま す。 オプション オプション:[[C1FlexReportDesigner オプション] オプション]ダイアログボックスを開きます。ここで、C1FlexReportDesigner ア プリケーションのデフォルトの外観と動作をカスタマイズできます。詳細については、「FlexReportDesigner オプション の設定」を参照してください。 終了 終了:C1FlexReportDesigner アプリケーションを閉じます。 設計モード 設計 設計モードでは、選択したレポートのセクションとフィールドが表示されます。これは、デザイナがレポートを作成または修正す るための主要な作業領域です。設計 設計モードは、以下のタブで構成されています。 89 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [ホーム]タブ [ホーム]タブ:[編集]、[テキスト]、[境界線]、[書式]、[データ]、[表示]の各メニュー機能へのショートカットを提供し ます。詳細については、「[ホーム]タブ」を参照してください。 [挿入]タブ [挿入]タブ:矢印、計算、グラフなどのさまざまなフィールドへのショートカットを提供します。詳細については、「[挿入] タブ」を参照してください。 [調整]タブ [調整]タブ:[グリッド]、[配置]、[位置]、[サイズ]の各メニュー機能へのショートカットを提供します。詳細について は、「[調整]タブ」を参照してください。 [ページ設定]タブ [ページ設定]タブ:[ページレイアウト]メニュー機能へのショートカットを提供します。詳細については、「[ページ設定] タブ」を参照してください。 [ホーム]タブ [ホーム]タブ [ホーム]タブは、以下のグループに分けられるいくつかのメニューで構成されています。 [編集]グループ [編集]グループ:次のオプションがあります。 貼り付け 貼り付け:最後にコピーされた項目を貼り付けます。 切り取り 切り取り:選択項目を切り取り、レポートから除去して、任意の場所に貼り付けることができるようにします。 コピー コピー:選択項目をコピーして、任意の場所に貼り付けることができるようにします。 削除 削除:選択項目を削除します。 元に戻す 元に戻す:レポート定義に対して行われた最後の変更を元に戻します。 やり直し やり直し:レポート定義に対して行われた最後の変更をやり直します。 [テキスト]グループ [テキスト]グループ:次のオプションがあります。 フォント フォント:選択したテキストの現在のフォントが表示され、選択項目に対して別のフォントを選択できます。それには、フォント名の横のドロップ ダウン矢印をクリックします。 フォントサイズ フォントサイズ:選択したテキストの現在のフォントサイズが表示され、別のフォントサイズを選択できます。フォントサイズボックスに数字を入 力するか、ドロップダウン矢印をクリックしてフォントサイズを選択します。 フォントサイズを拡大 フォントサイズを拡大:フォントサイズを 1 ポイント拡大します。 フォントサイズを縮小 フォントサイズを縮小:フォントサイズを 1 ポイント縮小します。 太字 太字:選択したテキストを太字にします(Ctrl+B キーを押すこともできます)。 斜体 斜体:選択したテキストを斜体にします(Ctrl+I キーを押すこともできます)。 下線 下線:選択したテキストに下線を付けます(Ctrl+U キーを押すこともできます)。 標準の配置 標準の配置:自動的に、数を左詰め、他の値を右詰めに揃えます。 テキスト左揃え テキスト左揃え:テキストを左揃えします。 テキスト中央揃え テキスト中央揃え:テキストを中央揃えします。 テキスト右揃え テキスト右揃え:テキストを右揃えします。 テキスト両端揃え テキスト両端揃え:選択したテキストを両端揃えにします。 フォントの色 フォントの色:選択したテキストの色を選択できます。 塗りつぶしの色 塗りつぶしの色:選択したテキストの背景色を選択できます。 [境界線]グループ [境界線]グループ:次のオプションがあります。 境界線のスタイル 境界線のスタイル:現在選択されているフィールドの境界線のスタイルを定義します。使用できるスタイルには、実線 実線、破線 破線、点線 点線、1 点鎖 線、2 点鎖線 点鎖線、および透過 透過があります。 境界線の色 境界線の色:現在選択されているフィールドの境界線の色を定義します。 境界線の幅 境界線の幅:現在選択されているフィールドの境界線の幅をツイップ単位で選択します。 [書式]グループ [書式]グループ:[書式 [書式]グループには次のオプションがあります。 レポートスタイル レポートスタイル:[レポートスタイルエディタ] [レポートスタイルエディタ]ダイアログボックスを開き、組み込みスタイルを選択するか、または独自のカスタムスタイルを 作成および編集できます。 書式の貼り付け 書式の貼り付け:現在の選択内容にスタイルを適用します。 テーブル行 テーブル行:現在の選択内容をテーブル行として書式設定します。 [書式] [書式]グループの[レポートスタイル] [レポートスタイル]をクリックすることで、[レポートスタイルエディタ] [レポートスタイルエディタ]ダイアログボックスにアクセスできます。 90 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の要素で構成されています。 [スタイルギャラリー]リスト [スタイルギャラリー]リスト:現在使用可能なすべての組み込みスタイルおよびカスタムスタイルが表示されます。使用可能な組み込みスタ イルの詳細については、「スタイルギャラリー」を参照してください。 [追加]ボタン [追加]ボタン:[スタイルギャラリー]リストにカスタムスタイルを追加します。追加されるスタイルは、[追加] [追加]ボタンをクリックしたときに[スタイ ルギャラリー]リスト内で選択されているスタイルをベースとします。 [削除]ボタン [削除]ボタン:選択したカスタムスタイルを削除します。このボタンは、[スタイルギャラリー]リストでカスタムスタイルが選択されている場合 にのみ有効になります。 プロパティグリッド プロパティグリッド:プロパティの変更およびカスタムスタイルの編集を行うことができます。プロパティグリッドは、[スタイルギャラリー]リスト でカスタムスタイルが選択されている場合にのみ使用および編集できます。 プレビューウィンドウ プレビューウィンドウ:[スタイルギャラリー]リストで選択されたスタイルのプレビューを表示します。 [適用]ボタン [適用]ボタン:ダイアログボックスを閉じることなく、選択内容にスタイルを適用します。 [OK]ボタン ]ボタン:ダイアログボックスを閉じ、変更を適用し、さらにそのスタイルを現在選択されているスタイルに設定します。 [キャンセル]ボタン [キャンセル]ボタン:スタイルに対して行ったすべての変更をキャンセルします。 [データ]グループ [データ]グループ:次のオプションがあります。 データソース データソース:このボタンをクリックすると、[メイン]と[データソースの追加]という 2 つのオプションが下にリストされます。 [メイン]オプションを使用すると、レポートの連結先であるメインデータソースを編集または削除できます。[編集] [編集]または[データソースの追 [データソースの追 加] 加]をクリックすると、[データソース] [データソース]ダイアログボックスが表示されます。このダイアログボックスで、新しいデータソースの選択、接続文字列 の変更、および SQL 文の編集を行うことができます。[データソース] [データソース]オプションの横にあるドロップダウンをクリックすると、レポートに存在す るデータソースのリストが表示されます。 [データソース] [データソース]タブから、現在のデータソース内のテーブル、ビュー、ストアドプロシージャを選択で きます。[[SQL 文] 文]タブをクリックすると、現在の SQL 文が表示されます。 91 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 接続文字列を変更するには、省略符ボタンをクリックします。[データリンクプロパティ] [データリンクプロパティ]ダイアログボックスが開きます。SQL 文を編集または 変更するには、[クエリービルダ] [クエリービルダ]ボタンをクリックします。これにより、[[SQL ビルダ] ビルダ]ダイアログボックスが開きます。 グループ :このボタンをクリックすると[グループ] [グループ]ダイアログボックスが表示され、ここで、グループ化およびソートの基準を追加および 削除できます。詳細については、「データのグループ化」と「データのソート」を参照してください。 レポート情報 :[レポート情報] [レポート情報]ダイアログボックスが開きます。このダイアログボックスで、レポートのタイトル、作成者、サブタイトル、作 成元アプリケーション、およびキーワードを設定できます。このレポート情報をすべてのレポートに適用するように選択することもできます。 92 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms VBScript エディタ エディタ:[[VBScript エディタ - Report.GlobalScripts]]ダイアログボックスを開きます。VBScript エディタ エディタでは、ステートメントや 式を切り替えながら、複数のスクリプトを簡単に編集できます。 [表示]グループ [表示]グループ:次のオプションがあります。 プロパティ プロパティ:[プロパティ] [プロパティ]タブを左ペインに表示します。[プロパティ] [プロパティ]タブを表示するためのショートカットキーは、[F4]です。 データ データ:[データ] [データ]タブを左ペインに表示します。[データ] [データ]タブを表示するためのショートカットキーは、[Shift]+[F4]です。 エラーリスト: エラーリスト:レポートをインポートやプレビューする時に発生する警告およびエラーのリストを表示します。 キャプション キャプション:デザイナパネルでセクションまたはサブセクションのキャプションを表示する方法を選択できます。選択できるオプションは、[す [す べて] べて](すべてにストリップを表示)、[セクション] [セクション](セクションにはストリップを表示し、サブセクションには表示しない)、[極細] [極細](セクションの ヘッダーストリップを表示しない)、[非表示] [非表示]、[すべて展開] [すべて展開]、および[すべて折りたたむ] [すべて折りたたむ]です。ドロップダウンには、次のオプションがありま す。 す べ て セ ク ショ ン 極 細 93 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 非 表 示 す べ て 展 開 す べ て 折 り た た む ズーム ズーム:レポートのズームレベルを設定する値を選択できます。[Ctrl]+[+]キーまたは[Ctrl]+[-]キーを押して、デザイナパネルをズームイ ンまたはズームアウトすることもできます。 [挿入]タブ [挿入] [挿入]タブは、レポートの設計時に挿入できる複数のフィールドで構成されています。各フィールドボタンをクリックすると、1 つ のフィールドが作成され、そのプロパティが初期化されます。[挿入] [挿入]タブは、次の 3 つのグループで構成されています。 [フィールド] [フィールド]グループ グループ:次の項目があります。 矢印 矢印:十字マウスカーソルを矢印カーソルに戻します。 テキスト テキスト:ソースレコードセットに連結されたフィールド、または連結されていない(静的)テキストラベルを作成します。こ のボタンをクリックするとリストが表示され、レコードセットフィールドを選択できます。連結フィールドは、データベースか ら取得した生データを表示するだけではありません。フィールドの Text プロパティを編集し、任意の VBScript 式を使 用できます。 RTF:RTF フィールドを作成します。このボタンをクリックするとリストが表示されます。そこから、同じレポート定義ファイ ルに含まれる他のフィールドを選択して RTF 形式で表示できます。 チェックボックス チェックボックス:Boolean 値をチェックボックスとして表示する連結フィールドを作成します。デフォルトでは、チェック ボックスには通常のチェックマークが表示されます。フィールドを作成した後に、CheckMark.Style プロパティを変更す ることで、これをラジオボタンまたは十字マーカーに変更できます。 94 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms バーコード バーコード:バーコードを表示するフィールドを作成します。このボタンをクリックするとメニューが表示されます。そこか ら、同じレポート定義ファイルに含まれる他のフィールドを選択してバーコードとして表示できます。詳細については、 「バーコードフィールド」を参照してください。 計算 計算:計算フィールドを作成します。このボタンをクリックすると、コードエディタダイアログボックスが表示されます。そこ で、値を評価するために使用する VBScript 式または任意の式を入力できます。このドロップダウンをクリックすると、レ ポートの作成または印刷日時、ページ番号、ページ数、"ページ n/m"、レポート名などをレンダリングするためによく使 用される式を選択できます。 画像 画像:レコードセットに格納されているデータ連結画像用のフィールドまたは静的(非連結)画像用のフィールドを作成し ます。このボタンをクリックすると、[開く]ダイアログボックスが表示され、ロゴなどの静的(非連結)画像を選択できま す。ドロップダウンをクリックすると、ソースレコードセット内の画像フィールドを選択できます(存在する場合。すべての レコードセットにこのタイプのフィールドが存在するわけではありません)。 図形 図形:直線、二等辺三角形、直角三角形、四角形、楕円、円弧などの幾何学図形を作成します。これらの図形を使用し て、レポートの外観を強化できます。 サブレポート サブレポート:別のレポートを表示するフィールドを作成します。このボタンをクリックするとリストが表示され、そこから、 同じレポート定義ファイルに含まれる他のレポートを選択できます。 グラフ グラフ:チャートを表示するフィールドを作成します。詳細については、「チャートフィールド」を参照してください。 [サブセクション] [サブセクション]グループ グループ:次の項目で構成されます。 追加 追加:現在のセクションの下部にサブセクションを追加します。 削除 削除:現在選択されているサブセクションを削除します。 上に移動 上に移動:現在選択されているサブセクションを 1 つ上に移動します。 下に移動 下に移動:現在選択されているサブセクションを 1 つ下に移動します。 [カスタムフィールド] [カスタムフィールド]グループ グループ:次の項目で構成されます。 SuperLabel フィールド フィールド:HTML 書式設定テキストをレンダリングするフィールドを作成します。フィールドのテキストプロ パティには、レンダリングする任意の HTML テキストを設定します。 Map フィールド フィールド:地球上の領域を表示するフィールド(マップ)を作成します。詳細については、「レポート内のマップ」を 参照してください。 レポートへのフィールドの追加方法については、「FlexReport フィールドの追加」と「FlexReport カスタムフィールドの追加」を 参照してください。 [調整]タブ [調整] [調整]タブには、グリッド、配置、位置、およびサイズへのショートカットがあります。次のグループで構成されます。 [グリッド]グループ [グリッド]グループ:[グリッド [グリッド]グループには次の項目があります。 グリッドにスナップ グリッドにスナップ:フィールドをグリッドにスナップします。この項目が選択されている場合は、フィールドをグリッドの線 と線の間に配置することはできません。 グリッドの表示 グリッドの表示:プレビューで、レポートの背景にグリッドを表示します。グリッドは、フィールドの配置と整列に役立ちま す。デフォルトでは、このオプションが選択されています。 フィールドのロック フィールドのロック:レポート内のフィールドをロックおよびロック解除します。 目的の位置にフィールドを配置した後、そ れらのフィールドをロックして、マウスやキーボードでフィールドを不用意に移動することを防止できます。 グリッドのプロパティ グリッドのプロパティ:[[FlexReportDesigner オプション] オプション]ダイアログボックスが表示されます。詳細については、 「FlexReportDesigner オプションの設定」を参照してください。 [配置]グループ [配置]グループ:[配置 [配置]グループには次の項目があります。 左:選択したフィールドを、水平方向の左に配置します。 95 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 右:選択したフィールドを、水平方向の右に配置します。 中央 中央:選択したフィールドを、水平方向の中央に配置します。 上:選択したフィールドを、垂直方向の上に配置します。 下:選択したフィールドを、垂直方向の下に配置します。 上下中央 上下中央:選択したフィールドを、垂直方向の中央に配置します。 レポート内の要素は、水平方向と垂直方向の両方に合わせて配置することができます。たとえば、要素を左と上の両方に合 わせて配置できます。 [位置]グループ [位置]グループ:[位置] [位置]グループは、要素間の間隔、および要素を階層化する方法を制御します。次の項目で構成されま す。 左右間隔均等 左右間隔均等:選択したフィールド間の左右間隔を均等化します。 左右間隔拡大 左右間隔拡大:選択したフィールド間の左右間隔を拡大します。 左右間隔縮小 左右間隔縮小:選択したフィールド間の左右間隔を縮小します。 上下間隔均等 上下間隔均等:選択したフィールド間の上下間隔を均等化します。 上下間隔拡大 上下間隔拡大:選択したフィールド間の上下間隔を拡大します。 上下間隔縮小 上下間隔縮小:選択したフィールド間の上下間隔を縮小します。 グリッドにスナップ グリッドにスナップ:現在選択されているフィールドを最も近いグリッド線にスナップします。 最前面に移動 最前面に移動:選択したフィールドを、階層化されたすべてのフィールドの前面に配置します。 最背面に移動 最背面に移動:選択したフィールドを、階層化されたすべてのフィールドの背面に移動します。 [サイズ]グループ [サイズ]グループ:[サイズ [サイズ]グループには次の項目があります。 最大高さに合わせる 最大高さに合わせる:選択したすべてのフィールドの高さを最も高いフィールドに合わせます。 最小高さに合わせる 最小高さに合わせる:選択したすべてのフィールドの高さを最も低いフィールドに合わせます。 最大幅に合わせる 最大幅に合わせる:選択したすべてのフィールドの幅を最も広いフィールドに合わせます。 最小幅に合わせる 最小幅に合わせる:選択したすべてのフィールドの幅を最も狭いフィールドに合わせます。 グリッドのサイズに合わせる グリッドのサイズに合わせる:選択したフィールドの境界を最も近いグリッド線にスナップします。 [ページ設定]タブ [ページ設定] [ページ設定]タブは、[ページレイアウト]メニュー機能へのショートカットを提供します。次のオプションがあります。 縦:レポートのレイアウトを縦 縦表示に変更します(この場合、高さが幅より長くなります)。 横:レポートのレイアウトを横 横表示に変更します(この場合、高さが幅より短くなります)。 ページ設定 ページ設定:プリンタの[ページ設定] [ページ設定]ダイアログボックスを開きます。 プレビューモード プレビュー プレビューモードは、現在のレポートのプレビューを表示します。プレビュー プレビューモードは、以下の項目で構成されています。 96 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [ページレイアウト]グループ [ページレイアウト]グループ:次のオプションがあります。 縦:レポートのレイアウトを縦 縦表示に変更します(この場合、高さが幅より長くなります)。 横:レポートのレイアウトを横 横表示に変更します(この場合、高さが幅より短くなります)。 ページ設定 ページ設定:プリンタの[ページ設定] [ページ設定]ダイアログボックスを開きます。 [表示]グループ [表示]グループ:次のオプションがあります。 ページ区切り付き :レポートのページ区切り付き表示とページ区切りなし表示を切り替えます。 パラメータ :レポートのパラメータパネルを表示または非表示にします。レポートにパラメータが含まれている場合にの み有効です。 アウトライン アウトライン:ドキュメントのテキストのアウトラインを表示します。 サムネイル: 標準ビューとサムネイルビューを切り替えます。 1 ページ ページ:一度に 1 ページをプレビューできます。 2 ページ ページ:一度に 2 ページをプレビューできます。 ズーム ズーム:特定のパーセントに、またはウィンドウに合わせてページをズームします。ズームインのショートカットキーは [Ctrl]+[+]、ズームアウトのショートカットキーは[Ctrl]+[-]です。 [ナビゲーション]グループ [ナビゲーション]グループ:次のオプションがあります。 最初のページ 最初のページ:プレビューの最初のページに移動します。 前のページ 前のページ:プレビューの前のページに移動します。 [ページ] [ページ]:このテキストボックスに数字を入力すると、プレビューがそのページに移動します。 次のページ 次のページ:プレビューの次のページに移動します。 最後のページ 最後のページ:プレビューの最後のページに移動します。 前のビュー 前のビュー:前に表示されたページに戻ります。 次のビュー 次のビュー:次に表示されたページに移動します。これは、[前のビュー] [前のビュー]ボタンをクリックした後にのみ表示されます。 [ツール]グループ [ツール]グループ:次のオプションがあります。 ハンドツール ハンドツール:ハンドツールを使用すると、ドラッグアンドドロップ操作でプレビューを移動できます。 テキスト選択ツール テキスト選択ツール:テキスト選択ツールを使用すると、ドラッグアンドドロップ操作でテキストを選択できます。次に、こ のテキストを別のアプリケーションにコピーして貼り付けることができます。 検索 検索:[検索] [検索]オプションをクリックすると、[検索] [検索]ペインが開き、ドキュメント内のテキストを検索できます。テキストを検 索するには、検索対象のテキストを入力し、検索オプション(ある場合)を選択して、[検索] [検索]をクリックします。 [エクスポート]グループ [エクスポート]グループ:[エクスポート]グループの各項目を選択すると、[レポートをファイルにエクスポート] [レポートをファイルにエクスポート]ダイアログボッ クスが開き、エクスポートするファイルの場所を選択できます。[エクスポート] [エクスポート]グループには、次のオプションがあります。 PDF:レポートを PDF ファイルにエクスポートします。ドロップダウン矢印には、フォントが埋め込まれていない(リンクさ れている)PDF と PDF/A(埋め込みフォント) (埋め込みフォント)のオプションがあり、PDF ファイルでシステムフォントを使用するか、選択 したフォントを埋め込むかを選択できます。 HTML:レポートを HTML ファイルにエクスポートします。次に、このテキストを別のアプリケーションにコピーして貼り付 けることができます。ドロップダウン矢印には、[プレーン [プレーン HTML]]、[ページ化 [ページ化 HTML]]、[ドリルダウン [ドリルダウン HTML]]、[テー [テー ブルベース HTML]]の各オプションがあります。プレーン HTML ファイルにエクスポートするか、矢印リンクを使用して ページ移動できる複数の HTML ファイルにエクスポートするかなどを選択できます。 Excel:レポートを Microsoft Excel ファイルにエクスポートします。ドロップダウン矢印には、[[Microsoft Excel 97]]と[[Microsoft Excel 2007 - OpenXML]]の各オプションがあります。ドキュメントを XLS ファイルまたは XLSX ファ イルのどちらで保存するかを選択できます。 RTF:レポートをリッチテキストファイル(RTF)としてエクスポートします。 Word:: レポートを Open XML Word(DOCX)形式にエクスポートします。 その他 その他:[その他] [その他]ドロップダウン矢印をクリックすると、[TIFF](TIFF としてエクスポート)、[圧縮メタファイル](ZIP として エクスポート)、[BMP](ビットマップ画像)、[PNG](Portable Network Graphic)、[JPEG]、[GIF]の各レポートエクス ポートオプションが追加で表示されます。 エクスポートの詳細については、「レポートのエクスポートと公開」を参照してください。 生成 生成: 97 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [更新] [更新]ボタンがあります。[更新] [更新]ボタンをクリックすると、現在のレポートが再生成されます。レポートの再生成中は、このボタ ンが[停止] [停止]に変わり、レポートの再生成を停止することもできます。 FlexReportDesigner オプションの設定 [FlexReportDesigner オプション] オプション]ダイアログボックスにアクセスするには、[ファイル] [ファイル]メニューをクリックし、[オプション] [オプション]をク リックします。詳細については、「[ファイル]メニュー」を参照してください。 [FlexReportDesigner オプション] オプション]ダイアログボックスには、アプリケーションの外観と動作を制御する 5 つのタブがありま す。各タブに含まれるタブとオプションは、次のとおりです。 [全般]タブ 次のオプションがあります。 プロパティグリッドを分類する プロパティグリッドを分類する:プロパティタイプによってプロパティを分類します。プロパティグリッドにアクセスするに は、デザインビューの左ペインの下にある[プロパティ] [プロパティ]タブをクリックします。 元に戻す 元に戻す/やり直しを有効にする やり直しを有効にする:アプリケーションの「元に戻す」操作と「やり直し」操作を有効にします。 フィールドプロパティをフィルタ処理する フィールドプロパティをフィルタ処理する:設定されているプロパティに基づいてプロパティグリッドをフィルタ処理しま す。プロパティグリッドにアクセスするには、デザインビューの左ペインの下にある[プロパティ] [プロパティ]タブをクリックします。 レポートリストをソートする レポートリストをソートする:[レポート] [レポート]タブにリストされるレポートリストをソートします。レポートにアクセスするには、デ ザインビューの左ペインの下にある[レポート] [レポート]タブをクリックします。 デザイナテーマ デザイナテーマ:[組み込み] [組み込み]または[テーマフォルダ] [テーマフォルダ]内のオプションからテーマを設定します。 [設計ペイン]タブ 98 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次のオプションがあります。 グリッドの表示 グリッドの表示:レポートプレビューウィンドウにグリッドを表示します。 グリッドにスナップ グリッドにスナップ:レポートのグリッドにすべてのオブジェクトをスナップします。このオプションを選択すると、グリッド 線とグリッド線の間にはオブジェクトを配置できなくなります。 サブレポートコンテンツの表示 サブレポートコンテンツの表示:レポートにサブレポートのコンテンツを表示します。 C1FlexReport.CreationGraphics を参照グラフィックとして使ってフィールドをレンダリングす る:C1FlexReport.CreationGraphics を参照として使用してフィールドをレンダリングします。 グリッド単位 グリッド単位:グリッドの間隔を指定します。オプションには、[自動] [自動]、[インチ] [インチ]、[センチメートル] [センチメートル]、および[カスタム] [カスタム]が あります。 グリッド間隔 グリッド間隔:グリッド線の間隔を設定します。このオプションは、[グリッド単位] [グリッド単位]オプションを[カスタム] [カスタム]に設定した場合 にのみ有効です。 [主グリッドの色] [主グリッドの色]:主グリッド線の色を設定します。 [副グリッドの色] [副グリッドの色]:副グリッド線の色を設定します。 フィールドの辺の色 フィールドの辺の色:レポートのフィールドの辺の色を設定します。 [保存 [保存/ロード]タブ ロード]タブ 99 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次のオプションがあります。 起動時に最近開いたファイルを再ロードする 起動時に最近開いたファイルを再ロードする:このオプションをオンにすると、C1FlexReportDesigner アプリケーショ ンを開くたびに、最後に開いたファイルが表示されます。 レンダリングの前に変更を保存する レンダリングの前に変更を保存する:このオプションをオンにすると、レンダリングの前にレポートが保存されます。 エクスポート時にオプションを表示する エクスポート時にオプションを表示する:このオプションをオンにすると、エクスポート時にレポートのオプションが保存さ れます。 保存時に画像を XML に埋め込む に埋め込む:このオプションをオンにすると、レポートの保存時に XML に画像が埋め込まれま す。 デフォルトのエクスポート形式 デフォルトのエクスポート形式:デフォルトのエクスポート形式を設定します。エクスポートの詳細については、「レポート のエクスポートと公開」を参照してください。 [接続]タブ 100 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms トランザクション分離レベルのオプションがあります。 [スクリプトエディタ]タブ 101 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次のオプションがあります。 自動構文チェック 自動構文チェック:[[VBScript エディタ] エディタ]ダイアログボックスで構文を自動的にチェックするかどうかを指定します。 構文の色指定 構文の色指定:[[VBScript エディタ] エディタ]ダイアログボックスで構文テキストを自動的に色分けするかどうかを指定します。 フォント フォント:[[VBScript エディタ] エディタ]ダイアログボックスで使用されるテキストの外観を定義します。 [警告]タブ 102 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次のオプションがあります。 起動時に更新の有無を確認する 起動時に更新の有無を確認する:このオプションをオンにすると、C1FlexReportDesigner アプリケーションを開いたと きに更新の有無が確認されます。 Crystal Reports からのインポート: からのインポート:RAS API が無効な場合は警告する が無効な場合は警告する:このオプションをオンにすると、Crystal Reports を C1FlexReportDesigner にインポートする際に、RAS API が無効な場合は警告されます。 上の各タブで、[OK]をクリックすると変更が保存され、[キャンセル]をクリックすると、[[FlexReportDesigner オプション] オプション]ダイ アログボックスで行った変更がキャンセルされます。 スタイルギャラリー [スタイルギャラリー] [スタイルギャラリー]ダイアログボックスには、レポートの書式設定に使用できるすべての組み込みスタイルおよびカスタムス タイルの詳細が表示されます。組み込みスタイルには、Vista と Office 2007 のテーマを含む、標準の Microsoft AutoFormat テーマが含まれています。[ホーム] [ホーム]タブを選択し、[レポートスタイル] [レポートスタイル]をクリックすることで、C1FlexReportDesigner アプリ ケーションからスタイルギャラリー スタイルギャラリーにアクセスできます。 次の組み込みスタイルがあります。 スタイル名 Access 2007 103 プレビュー スタイル名 プレビュー Oriel(スパイス) Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms スタイル名 プレビュー スタイル名 Access 2003 Origin(アース) Apex(ひらめき) Paper(ペーパー) Aspect(シック) Solstice(フレッシュ) Civic(クール) Technic(テクノロ ジー) Concourse(ビジネ ス) Trek(トラベル) ComponentOne Urban(アーバン) Equity(ジャパネスク) Verve(ネオン) Flow(リゾート) Windows Vista 104 プレビュー Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms スタイル名 プレビュー スタイル名 Foundry(エコロジー) Bold(太字) Median(デザート) Casual(カジュアル) Metro(メトロ) Compact(コンパク ト) Module(モジュール) Corporate(コーポ レート) None Formal(フォーマル) Northwind(ノース ウィンド) Soft Gray(ソフトグ レー) Office(オフィス) Verdana(ヴァーダ ナ) Opulent(キュート) WebReport 105 プレビュー Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 複数のサブセクションの追加 通常、FlexReport には、詳細、ヘッダー、フッター、ページヘッダー、ページフッター、グループヘッダー、グループフッターの各セクショ ンが含まれます。これらのセクションには、それぞれ少なくとも 1 つのサブセクションが含まれます。1 つのセクションに、任意の数の サブセクションを追加できます。 サブセクションは、親セクションに存在するデータに関する追加情報を提供する場合に便利です。他のセクションと同じ方法でデータ フィールドを追加できます。また、サブセクションに図形フィールドを追加するだけで、レポートを見栄えよくすることができます。 複数のサブセクションを追加するには 以下の手順では、レポートの詳細セクションに複数のサブセクションを追加します。 1. 詳細 詳細セクションをクリックします。既に「Detail/ <A>」という名前のサブセクションがあることを確認します。 2. [挿入] [挿入]タブに移動し、[サブセクション] [サブセクション]グループから[追加] [追加]をクリックします。これで、詳細セクションに 1 つのサブセクション が追加され、自動的に「Detail/ <B>」という名前が付けられます。 3. [サブセクション]グループから[追加] [追加]を再度クリックし、もう 1 つのサブセクションを追加します。これで、「Detail/ <C>」という 名前のサブセクションが追加されます。 以下の手順では、サブセクションに 1 つのフィールドを追加します。 4. 5. 6. 7. 106 [挿入] [挿入]タブに移動し、[サブセクション] [サブセクション]グループから図形 図形フィールドをクリックします。 サブセクション Detail/ <B> に、図形 図形フィールドをドロップします。 プロパティペインで、Shape プロパティを Line に設定します。選択ハンドルをドラッグして、直線の長さを調整します。 レポートをプレビュー表示します。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 詳細セクションのすべてのフィールドの後に直線が描画されます。 FlexReport フィールドの追加 FlexReport では、極めて簡単にフィールドを追加できます。C1FlexReportDesigner の[挿入] [挿入]タブには、利用可能なフィールド がすべて用意されています。目的のフィールドをクリックし、それをレポートにドロップするだけです。 以下のセクションでは、さまざまなフィールドのタイプ、プロパティ、およびレポートに追加する方法について説明しています。 フィールドの追加に使用するデータベースは NWind_ja.mdb です。 テキストフィールド テキスト テキストフィールドは、データを表示するために最もよく使用されるレポートフィールドです。以下を挿入するために使用されます。 データ連結テキストフィールド 非連結(静的)テキストラベル FlexReportDesigner アプリケーションを使用してデータ連結テキストフィールドを追加するには 1. 2. 3. 4. 107 C1FlexReportDesigner で新しいレポートを作成します。 そのレポートを Products テーブルに連結します。 製品のテキストフィールド CategoryName が表示されるグループヘッダーを作成します。 [挿入] [挿入]タブに移動し、[テキスト] [テキスト]フィールドアイコンをクリックします。(データソースに連結された)すべてのデータフィールド データフィールドが リストされます。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 5. レポートのグループヘッダーセクションに CategoryName データフィールドを追加します。 6. レポートをプレビュー表示します。 FlexReportDesigner を使用して非連結(静的)テキストラベルを追加するには 108 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 1. [挿入] [挿入]タブに移動し、[テキスト] [テキスト]フィールドアイコンをクリックします。 2. レポートの設計領域で十字線をドラッグして、セクション内にフィールドを表示する範囲を描画します。 3. フィールドをクリックし、ラベルとして表示するテキストを入力します。 RTF フィールド リッチテキストフォーマット( リッチテキストフォーマット(RTF))フィールドは、書式設定されたテキストを表示するために使用されます。このボタンをクリックするとメニューが表示されま す。そこから、同じレポート定義ファイルに含まれる他のフィールドを選択して RTF 形式で表示できます。これらはデータ連結された RTF フィールドです。 RTF フィールドは、特に差し込み印刷レポートの作成で使用されます。 FlexReportDesigner アプリケーションで RTF フィールドを使用した差し込み印刷を作成するには 1. 新しいレポート C1FlexReportDesigner を作成します。 2. 以下の SQL 文を指定して、Customers および Orders テーブルにレポートを連結します。 SELECT Customers.CustomerID, Customers.CompanyName, Customers.ContactName, Customers.Address, Customers.City, Customers.Region, Customers.Country, Customers.PostalCode, Orders.OrderID, Orders.OrderDate, [Order Subtotals].Subtotal FROM Customers INNER JOIN ([Order Subtotals] INNER JOIN Orders ON [Order Subtotals].OrderID = Orders.OrderID) ON Customers.CustomerID = Orders.CustomerID WHERE CompanyName = "Ernst Handel" 3. [挿入] [挿入]タブから RTF フィールドを追加します。 4. プロパティペインから、背景色を淡色に設定します。 5. Text プロパティを次の式に設定します。 "Dear " + ContactName + "," + vbcrlf + vbcrlf + _ "Your order for past year totals to " + Format(Subtotal, "Currency") + vbcrlf + vbcrlf + _ "Because you have been such a terrific customer, " + _ "we decided to credit your account with $0.10. The amount will be credited in next 10 days. Your Address for future correspondance is "+"Address" + vbcrlf + vbcrlf + _ "Congratulations!" 6. 次のようにフィールドを配置します。 7. レポートをプレビュー表示します。 109 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms パラグラフフィールド 1 つのフィールド内で複数の書式設定テキスト、データベースフィールド、スクリプト、パラメータ、計算フィールドを使用するに は、パラグラフ パラグラフフィールドの使用が最適です。編集モードのパラグラフフィールドでは、次の操作を行うことができます。 静的テキストを入力します。 [Ctrl]+[Enter]キーを押して新しい行を挿入します。 テキストの任意の部分にフォント/前景色/背景色を設定します。 1 つのフィールド内にテキストと一緒に式(DB フィールド値と同様に)を挿入します。 任意のフィールドで[Alt]+[Enter]キーを押してプロパティを開きます。 任意の式を右クリックし、[式の編集]を選択して式エディタを開きます。 FlexReportDesigner アプリケーションでパラグラフフィールドを追加するには 1. 2. 3. 4. 110 C1FlexReportDesigner で新しい FlexReport を作成します。 それを Products テーブルと連結します。 [挿入]タブからレポートにパラグラフ パラグラフフィールドを追加します。 パラグラフ パラグラフフィールドをダブルクリックして編集モードに入ります。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 5. 「Product:」と入力します。 データベースフィールドを挿入するには 1. 2. 3. 4. 編集モードで、パラグラフフィールドを右クリックし、[式の挿入] [式の挿入]を選択します。 式エディタで、[データベースフィールド] [データベースフィールド]ドロップダウンから[ProductID]を選択します。 [完了] [完了]をクリックします。 Product:{ProductID} を選択し、リポンを使用して[前景色] [前景色]を緑に設定します。 編集モードで新しい行を変更するには 1. 編集モードで、[Ctrl]+[Enter]キーを押します。 2. 次の行で、静的テキスト「Unit Price is」を入力し、上記の手順を使用して UnitPrice データベースフィールドを挿入しま す。 3. {UnitPrice} を太字に設定します。 スクリプトを挿入するには 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. テキスト「UnitPrice is {UnitPrice}」の後に、「We have」と入力します。 右クリックし、[式の挿入] [式の挿入]を選択します。 次のスクリプトを追加します:Iif(UnitsInStock > 0, UnitsInStock, "No") [完了] [完了]をクリックします。 このスクリプト式の後に、静的テキスト「units in stock」を入力します。 編集モードでこのスクリプトを選択し、太字に設定します。 [Ctrl]+[Enter]キーを押します。 新しい行で右クリックし、[式の挿入] [式の挿入]を選択します。 次のスクリプトを入力します:Iif(Discontinued, "This product is no longer available", "") / [完了] [完了]をクリックします。 上記のスクリプトを選択し、[強調表示色] [強調表示色]を「Orange, Accent 6 Lighter 60%」に、[前景色] [前景色]を赤に設定します。 レポートをプレビュー表示します。 チェックボックスフィールド チェックボックス チェックボックスフィールドは、「はい/いいえ」をビジュアルに表現するために使用されます。チェックボックスフィールドは、デ 111 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms フォルトでは右側にテキストが付いた白抜きボックスとして表示されます。このフィールドはブール値を受け取ります。true に評 価されると、チェックボックスにチェックマークが表示されます。 FlexReportDesigner アプリケーションでデータ連結チェックボックスを追加するには 1. C1FlexReportDesigner で新しい FlexReport を作成します。 2. それを Products テーブルと連結します。[Product Name]、[Quantity Per Unit]、[Stock]、[Discontinued]の各 フィールドを選択します。 3. [挿入]タブから、[チェックボックス] [チェックボックス]フィールドをクリックし、[Discontinued]データフィールドを選択します。 4. そのデータフィールドをレポートの詳細セクション(グループヘッダーの Discontinued ラベルの下)にドロップします。 5. プロパティペインから、CheckAlign を CenterMiddle に設定します。 6. レポートをプレビュー表示します。 112 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms バーコードフィールド FlexReport のバーコード バーコード機能を使用すると、さまざまな業界標準のバーコードをレポート内のバーコードフィールドに統合でき ます。バーコードフィールドはすばやく簡単に生成できます。バーコードフィールドをレポートにドロップし、バーコードシンボル を選択し、テキストを指定すれば完了です。 FlexReport のバーコード機能は、バーコードに関連付けられたプロパティによって拡張されています。読み取りエラーをなくす ために、チェックサムを自動的に追加しながら値をエンコードしています。 バーコードには、C1.Win.Barcode アセンブリが使用されます。 バーコードシンボル バーコードシンボルは、文字データをバーコードの太いバー、細いバー、およびスペースから成るパターンに変換するために 使用されるエンコードスキームを指定します。FlexReport で使用されるバーコードシンボルを次の表に示します。 スタイル名 113 例 説明 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Ansi39 ANSI 3 of 9(Code 39)は、大文字、数 字、- , * $ / + % を使用します。これがデ フォルトのバーコードスタイルです。 Ansi39x ANSI Extended 3 of 9(Extended Code 39)は、ASCII 文字セット全体を使用しま す。 Codabar Codabar は、A B C D + - : . / $ および数 字を使用します。 Code_128_A Code 128 A は、制御文字、数字、句読 点、大文字を使用します。 Code_128_B Code 128 B は、数字、句読点、大文字、 小文字を使用します。 Code_128_C Code 128 C は数字だけを使用します。 Code_128auto Code 128 Auto は、ASCII 文字セット全体 を使用します。最小のバーコードになるよ うに、Code 128 A、B、および C から 1 つ が自動的に選択されます。 Code_2_of_5 Code 2 of 5 は数字だけを使用します。 Code93 Code 93 は、大文字、数字、% $ * / , + を使用します。 Code25intlv Interleaved 2 of 5 は数字だけを使用しま す。 Code39 Code 39 は、大文字、数字、% * $ /. , - + を使用します。 Code39x Extended Code 39 は、ASCII 文字セット 全体を使用します。 114 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Code49 Code 49 は、各段 8 文字の 2 ~ 8 段か ら成る 2 次元高密度スタック型バーコード です。各段には、スタートコードとストップ コードが含まれます。ASCII 文字セット全 体をエンコードします。 Code93x Extended Code 93 は、ASCII 文字セット 全体を使用します。 DataMatrix Data Matrix は、正方形または長方形の マトリックスパターンに並べられた正方形 モジュールから成る 2 次元高密度バー コードです。 EAN_13 EAN-13 は、数字(12 個の数字とチェック デジット)だけを使用します。12 個の数字 だけを文字列として受け取ってチェックデ ジット(CheckSum)を計算し、それを 13 番 目の位置に追加します。チェックデジット は、バーコードが正しくスキャンされたかど うかを検証するために使用される追加の 桁です。チェックデジットは、CheckSum プ ロパティが true に設定されると自動的に 追加されます。 EAN8 EAN-8 は、数字(7 個の数字とチェックデ ジット)だけを使用します。 EAN128FNC1 EAN-128 は、運送業で梱包物を識別する ためのアプリケーション識別子(AI)データ の 1 次元英数字表現です。 このタイプのバーコードには、以下のセク ションが含まれています。 先頭のクワイエットゾーン(空白領 域) Code 128 のスタート文字 スキャナに EAN-128 バーコードで あることを識別させる FNC(ファン クション)1 文字 データ(AI + データフィールド) シンボルチェック文字(「スタート コード値 + 各文字位置と各文字値 の積」を 103 で除算。この剰余値 がチェックサム)。 ストップ文字 末尾のクワイエットゾーン(空白領 域) 115 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms データセクションの AI は、後に続くデータ のタイプ(ID、日付、数量、計量単位など) を設定します。データのタイプごとに固有 のデータ構造があります。この AI がある ことが、EAN-128 コードが Code 128 と異 なる点です。 1 つのバーコードで複数の AI(およびその データ)を組み合わせることができます。 EAN128FNC1 は UCC/EAN-128 (EAN128)バーコードタイプの 1 つで、任 意の場所に FNC1 文字を挿入したり、 バーサイズを調整することができるなど、 UCC/EAN-128 にはない機能をサポートし ています。 FNC1 文字を挿入するには、実行時に Text プロパティに "\n"(C# の場合)また は "vbLf"(VB の場合)を設定します。 IntelligentMail Intelligent Mail(以前の 4-State Customer Barcode)は、米国内の郵便に 使用される 65 本のバーコードです。 JapanesePostal これは、日本の郵便制度で使用される バーコードです。20 桁の英数字をエン コードします。これには、7 桁の郵便番号 の後に、必要に応じて番地や部屋番号な どの情報が含まれます。エンコードする データにはハイフンを含めることができま す。 Matrix_2_of_5 Matrix 2 of 5 は、3 本の黒バーと 2 本の 白バーから成る比較的高密度のバーコー ドです。 MicroPDF417 MicroPDF417 は、PDF417 から派生され た 2 次元多段バーコードです。MicroPDF417 は、データをできる限り小さなサ イズの 2 次元シンボル(最大 150 バイト、 英数字 250 文字、数字 366 桁)にエン コードする必要があるアプリケーション用 に設計されています。 MicroPDF417 では、可変長のアプリケー ション識別子(AI)のフィールド区切り文字 として FNC1 文字を挿入することができま す。 FNC1 文字を挿入するには、実行時に Text プロパティに "\n"(C# の場合)また は "vbLf"(VB の場合)を設定します。 MSI 116 MSI Code は数字だけを使用します。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Pdf417 Pdf417 は、よく使用されている 2 次元高 密度バーコードです。最大 1,108 バイトの 情報をエンコードできます。このバーコード は、小さなバーコードを積み重ねて構成さ れます。ASCII 文字セット全体をエンコード します。10 のエラー修正レベルと 3 つの データコンパクションモード(Text、Byte、 および Numeric)があります。このバー コードシンボルは、英数字で最大 1,850 文字、数字で最大 2,710 桁をエンコードで きます。 PostNet PostNet は、数字とチェックデジットを使用 します。 QRCode QRCode は、英数字やバイトデータに加 えて、日本語の漢字やかな文字も扱うこと ができる 2 次元バーコードです。このバー コードは最大 7,366 文字をエンコードでき ます。 RM4SCC Royal Mail RM4SCC は、文字と数字 (チェックデジット付き)だけを使用します。 これは、イギリスのロイヤルメールで使用 されるバーコードです。 RSS14 RSS14 は、全方向型 POS スキャンに EAN.UCC 品目識別を使用する 14 桁の 省スペースシンボル(Reduced Space Symbology:RSS)です。 RSS14Stacked RSS14Stacked は、RSS14Truncated と同 様にインジケータデジットを含む EAN.UCC 情報を使用しますが、幅が狭い場合、2 段 に積み重ねられます。 RSS14Stacked では合成オプションを設定 できます。[タイプ] [タイプ]ドロップダウンリストか らバーコードのタイプを選択し、[値] [値]フィー ルドで合成バーコードの値を指定できま す。 RSS14StackedOmnidirectional RSS14StackedOmnidirectional は、 RSS14 と同様に全方向型スキャンを含む EAN.UCC 情報を使用しますが、幅が狭い 場合、2 段に積み重ねられます。 RSS14Truncated RSS14Truncated は、RSS14 と同様に EAN.UCC 情報を使用しますが、POS でス 117 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms キャンされない小さな品目に使用するため に、0 または 1 のインジケータデジットを 含みます。 RSSExpanded RSSExpanded は、RSS14 と同様に EAN.UCC 情報を使用しますが、重量や賞 味期限などの AI 要素を追加します。 RSSExpanded では、可変長のアプリケー ション識別子(AI)のフィールド区切り文字 として FNC1 文字を挿入することができま す。 FNC1 文字を挿入するには、実行時に Text プロパティに "\n"(C# の場合)また は "vbLf"(VB の場合)を設定します。 RSSExpandedStacked RSSExpandedStacked は、RSSExpanded と同様に AI 要素を含む EAN.UCC 情報を 使用しますが、幅が狭い場合、2 段に積 み重ねられます。 RSSExpandedStacked では、可変長のア プリケーション識別子(AI)のフィールド区 切り文字として FNC1 文字を挿入すること ができます。 FNC1 文字を挿入するには、実行時に Text プロパティに "\n"(C# の場合)また は "vbLf"(VB の場合)を設定します。 RSSLimited RSS Limited は、RSS14 と同様に EAN.UCC 情報を使用しますが、POS でス キャンされない小さな品目に使用するため に、0 または 1 のインジケータデジットを 含みます。 RSSLimited では合成オプションを設定で きます。[タイプ] [タイプ]ドロップダウンリストから バーコードのタイプを選択し、[値] [値]フィール ドで合成バーコードの値を指定できます。 UCCEAN128 UCC/EAN –128 は、ASCII 文字セット全体 を使用します。HIBC アプリケーションで使 用される特殊な Code 128 です。 UPC_A UPC-A は、数字(11 個の数字とチェック デジット)だけを使用します。 UPC_E0 UPC-E0 は数字だけを使用します。Zero Suppression の UPC シンボルに使用され ます。Caption プロパティには、6 桁の UPC-E コードまたは完全な 11 桁(必須の コードタイプ 0 を含む)の UPC-A コードを 入力する必要があります。11 桁のコード が入力された場合、バーコードコントロー ルは、可能であればそれを 6 桁の UPC-E 118 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms コードに変換します。11 桁のコードを 6 桁 のコードに変換できない場合は、何も表示 されません。 UPC_E1 UPC-E1 は数字だけを使用します。主に小 売業界で在庫ラベルに使用されます。 UPC-E1 の入力文字列の長さは数字 6 個 です。 バーコードフィールドは、プロパティペインで BarCode プロパティを使用することで、FlexReportDesigner に直接挿入できま す。Barcode を使用して、バーコードフィールドのバーコードのタイプを設定することもできます。 以下のバーコードは、FNC1 文字をサポートしています。 EAN128FNC1 MicroPDF417 RSSExpanded RSSExpandedStacked バーコードのプロパティ BarcodeOptions は、FlexReport でバーコードをレンダリングするためのプロパティを追加します。BarcodeOptions から公 開される共通のプロパティは次のとおりです。 BarDirection:バーコードの方向(水平または垂直)を選択します。使用可能なオプションは、LeftToRight、 RightToLeft、TopToBottom、BottomToTop です。バーコードの方向は、BarDirectionEnum を使用して設定するこ ともできます。 CaptionGrouping:キャプションのテキストを、サポートするバーコードタイプに応じて複数のグループに分割します。 値は True または False です。 CaptionPosition:バーコードシンボルに対するキャプションの相対的な垂直位置を選択します。使用可能なオプショ ンは、None、Above、Below です。 CheckSumEnabled:適切な場合にバーコードのチェックサムを計算してバーコードに含めるかどうかを指定します。 TextAlign:: キャプションテキストの配置を選択します。使用可能なオプションは、Left、Center、Right です。 SupplementNumber:: バーコードデータの補助コードを指定します。補助コードは、EAN または UPC シンボルの場 合、2 桁または 5 桁です。 SizeOptions:: BarHeight:: バーコードの高さを指定します(ツイップ単位)。 ModuleSize:: バーコードのモジュール(最も細いバーの幅)を指定します(ツイップ単位)。 NarrowWideRatio:: 細いバーの幅と太いバーの幅の比率を指定します。 SizeMode:: バーコードのサイズ変更モードを指定します。使用可能なオプションは次のとおりです。 Normal:: 元のサイズと同じバーコードのサイズを維持します。 Scale:: できるだけ広いフィールド領域を使用するようにバーコード画像を拡大縮小します。拡大縮小の 方法は、バーコードタイプによって異なります。たとえば、Code128 のような Bar タイプのバーコードで は高さが拡大され、Matrix、Rss、Composite などのバーコードでは高さと幅が同じ割合で拡大縮小され ます。 SupplementSpacing:: メインバーコードと補助バーコードの間隔を指定します。 さまざまなバーコードスタイルに応じて BarcodeOptions から公開されるその他のオプションは次のとおりです。 Code49: Grouping:: バーコードでグループ化を使用します。値は True または False です。 Group:: バーコードをグループ化する際のグループ番号を取得または設定します。有効な値は 0 ~ 8 です。 DataMatrix:: 119 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms EccMode:: ECC モードを選択します。有効な値は、ECC000、ECC050、ECC080、ECC100、ECC140、ECC200 です。 Ecc200SymbolSize: ECC200 シンボルのサイズを選択します。デフォルト値は SquareAuto です。 Ecc200EncodingMode: ECC200 エンコーディングモードを選択します。有効な値は、Auto、ASCII、C40、Text、X12、 EDIFACT、Base256 です。 Ecc000_140SymbolSize::ECC000_140 シンボルのサイズを選択します。 StructuredAppend:: 現在のバーコードシンボルが構造的連接シンボルの一部かどうかを選択します。 StructureNumber:: 構造的連接シンボル内の現在のシンボルの構造番号を指定します。 FileIdentifier:: 関連する構造的連接シンボルグループのファイル識別子を指定します。有効なファイル識別子値は、 [1,254] 以内である必要があります。ファイル識別子を 0 に設定すると、ファイル識別子が自動的に計算されます。 GS1Composite: Type:: 合成シンボルタイプを選択します。選択できる値は None または CCA です。CCA(Composite Component Version A)は、最小タイプの 2 次元コンポジットコンポーネントです。 Value:: CCA 文字データを取得または設定します。 MicroPDF417: CompactionMode:: CompactionMode のタイプを選択します。有効な値は、Auto、TextCompactionMode、 NumericCompactionMode、ByteCompactionMode です。 FileID:: 構造的連接シンボルのファイル ID を指定します。0 ~ 899 の値を取ります。 SegmentCount:: 構造的連接シンボルのセグメント数を指定します。0 ~ 99999 の値を取ります。 SegmentIndex:: 構造的連接シンボルのセグメントインデックスを指定します。0 ~ 99998 の範囲で、セグメント数の 値より小さい値を取ります。 Version:: シンボルサイズを選択します。デフォルト値は ColumnPriorAuto です。 PDF417: Column:: バーコードの列数を指定します。 Row:: バーコードの行数を指定します。 ErrorLevel:: バーコードのエラー修正レベルを指定します。 Type:: PDF417 バーコードのタイプを選択します。使用可能なタイプは Normal および Simple です。 QRCode Model:: QRCode のモデルを選択します。使用可能なモデルは Model1 および Model2 です。 ErrorLevel:: バーコードのエラー修正レベルを選択します。使用可能なオプションは、Low、Medium、Quality、High です。 Version:: バーコードのバージョンを指定します。 Mask:: バーコードのマスクに使用されるパターンを選択します。QRCode が正しく読み取られるようにするには、マス ク処理で明度のバランスを取る必要があります。使用可能なオプションは、Auto、Mask000、Mask001、Mask010、 Mask011、Mask100、Mask101、Mask110、Mask111 です。 Connection:: バーコードにコネクションを使用するかどうかを選択します。値は True または False です。 ConnectionNumber:: バーコードのコネクション番号を指定します。0 ~ 15 の範囲の整数値を取ります。 RssExpandedStacked:: RowCount:: 積み重ねる段数を指定します。 バーコードのクワイエットゾーンは、C1FlexReportDesigner のプロパティペインで MarginBottom、MarginLeft、 MarginRight、および MarginTop プロパティを使用して簡単に指定できます。 計算フィールド 生データを使用しないフィールドを作成するには、計算 計算フィールドが最適です。計算フィールドには、実行時に評価される式が設定さ れます。これらの式を使用して、データベースに保存されていないデータ値を生成します。 120 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 計算フィールドのドロップダウンには、定義済みの式がいくつか用意されています。 FlexReportDesigner アプリケーションを使用して定義済みの計算フィールドを追加するには 1. C1FlexReportDesigner で新しい FlexReport を作成します。 2. [挿入] [挿入]タブから、ページフッターセクションに[作成日]と[ページ n/m]の 2 つの計算 計算フィールドを追加します。 3. 設計領域で、これらの計算フィールド内の式を確認します。 4. レポートをプレビュー表示します。 121 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReportDesigner アプリケーションで、計算フィールドを定義し、そのフィールドを追加するには 1. 2. 3. 4. 新しいレポートを作成します。 そのレポートを Orders Details テーブルに連結します。 グループヘッダーで、合計価格のラベルを表示するためのテキスト テキストフィールド Total を追加します。 [データ] [データ]タブに移動し、メインデータソースを右クリックして、[計算フィールドの追加] [計算フィールドの追加]を選択します。VBScript エディタが表示 されます。 5. VBScript エディタ エディタで、次の式を記述します。 Quantity*UnitPrice 6. 前述した計算フィールドを次のようにドロップします。 122 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 7. レポートをプレビュー表示します。 画像フィールド 画像 画像フィールドは、データ連結された画像または静的な画像を挿入するために使用されます。画像フィールドをクリックすると、レポー トに挿入する画像ファイルを選択するように求めるダイアログボックスが表示されます。選択した画像がコピーされ、レポートファイル と同じディレクトリに置かれます。レポートファイルをアプリケーションに埋め込まない場合は、このファイルをアプリケーションと共に配 布する必要があります。レポートファイルをアプリケーションに埋め込むと、非連結ピクチャファイルもすべて埋め込まれます。 FlexReportDesigner アプリケーションを使用して画像フィールドを追加するには 1. 2. 3. 4. 5. 123 C1FlexReportDesigner で新しいレポートを作成します。 そのレポートを Products テーブルに連結します。 製品のテキストフィールド Image が表示されるグループヘッダーを作成します。 [挿入] [挿入]タブに移動し、[画像] [画像]フィールドアイコンのドロップダウンをクリックします。 [Picture]を選択し、画像フィールドをレポートのグループヘッダーセクションに追加します。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 6. レポートをプレビュー表示します。 図形フィールド 図形フィールドは、レポートに幾何学図形を表示するために使用されます。直線は区切りとしてよく使用されます。四角形は フィールドのグループを強調表示したり、テーブルやグリッドを作成するために使用されます。 式で図形の表示/非表示を定義するためのルールを設定することもできます。たとえば、追加注文レベルが在庫数に満たない 製品の名前を四角形で囲む場合は、レポートの OnPrint プロパティに次の式を記述して、図形の表示/非表示をいつオンにす るかを定義できます。 If UnitsInStock < ReorderLevel Then Shapefld.Visible = True Else Shapefld.Visible = False End If このシナリオの詳細については、「値に基づいたフィールドの表示/非表示」を参照してください。 124 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms サブレポートフィールド サブレポート サブレポートフィールドは、レポートにサブレポートを挿入するために使用されます。サブレポートは、別のレポート(メインレポート)の フィールド内に配置された通常のレポートです。サブレポートは、通常、メインレポート内の現在の値に基づく詳細情報をマスター/詳 細関係として表示する目的で設計されます。 次の例では、メインレポートにはカテゴリが表示され、詳細セクション内のサブレポートには現在のカテゴリに対する製品の詳細が表 示されます。 Categories テーブルと Products テーブルに基づくマスター/詳細レポートを作成するには、カテゴリレポート(マスタービュー)と製品 レポート(詳細ビュー)を作成する必要があります。 手順 1:マスターレポートの作成 :マスターレポートの作成 1. FlexReport ウィザード ウィザードを使用して、基本レポート定義を作成します。 1. Northwind データベース(ComponentOne Samples\Common フォルダの C1NWind.mdb)から Categories テーブ ルを選択します。 2. レポートに CategoryName および Description フィールドを挿入します。 125 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 2. 3. 4. 5. 6. C1FlexReportDesigner アプリケーションで、[設計] [設計]ボタンをクリックして、レポートの編集を開始します。 ページヘッダーおよびヘッダーセクションの Visible プロパティを False に設定します。 詳細セクションで、DescriptionCtl を選択し、それを CategoryNameCtl の真下に移動します。 プロパティペインを使用して、外観の設定(Background)を変更します。 [プレビュー] [プレビュー]ボタンを選択すると、カテゴリレポートは次の図のように表示されます。 手順 2:詳細レポートの作成 :詳細レポートの作成 1. C1FlexReportDesigner アプリケーションで[新しいレポート] [新しいレポート]ボタンをクリックし、FlexReport ウィザード ウィザードを使用して基本レ ポート定義を作成します。 1. C1NWind データベースから Products テーブルを選択します。 2. レポートに、ProductName、QuantityPerUnit、UnitPrice、UnitsInStock、および UnitsOnOrder フィールドを挿入 します。 2. Report Designer で、[設計] [設計]ボタンをクリックして、レポートの編集を開始します。 1. ページヘッダーおよびヘッダーセクションの Visible プロパティを False に設定します。 2. 詳細セクションで、ヘッダーのラベルに合わせてコントロールを配列します。プロパティペインを使用して、外観の設定を 変更します。 手順 3:サブレポートフィールドの作成 :サブレポートフィールドの作成 現在、C1FlexReportDesigner アプリケーションには、Categories Report と Products Report の 2 つのレポートがあります。次の 手順では、サブレポートを作成します。 126 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 1. Designer の[レポート]リストから、[[Categories Report]](マスターレポート)を選択します。 2. 設計モードで、[挿入] [挿入]タブの[フィールド] [フィールド]グループから[サブレポート] [サブレポート]アイコンをクリックし、ドロップダウンメニューか ら[[Products Report]]を選択します。 3. レポートの詳細セクションで、マウスポインタをクリックおよびドラッグして、サブレポートのフィールドを作成します。 手順 4:サブレポートとマスターレポートのリンク :サブレポートとマスターレポートのリンク マスター/詳細関係は、サブレポートフィールドの SubreportFilter プロパティで制御します。このプロパティには、フィルタ条件として 評価されてサブレポートのデータソースに適用できる式を設定する必要があります。 Report Designer では、この式を自動的に作成できます。次の手順を実行します。 1. サブレポートフィールドを右クリックし、メニューから[サブレポートのリンク] [サブレポートのリンク]を選択します。 [サブレポートのリンク] [サブレポートのリンク]ダイアログボックスが表示されます。ここで、リンク先のフィールドを選択できます。 127 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 設計領域のサブレポートフィールドは次のように表示されます。 2. フィールドを選択して[[OK]]をクリックすると、Report Designer はリンク式を作成し、その式をサブレポートフィールドの SubreportFilter プロパティに割り当てます。この例では、式は次のようになります。 "[CategoryID] = '" & [CategoryID] & "'" チャートフィールド FlexReport のチャート チャートフィールドは、FlexReportDesigner に組み込まれています。C1.Win.C1Chart および C1.Win.C1Chart3D アセンブリを使用して、それぞれ 2D および 3D チャートタイプから成るチャートフィールドがレンダリング されます。2DChart および 3DChart の詳細については、それぞれ 2DChart のドキュメントおよび 3DChart のドキュメントを参 照してください。 チャートタイプ FlexReport のチャートフィールド チャートフィールドでは、Chart.Chart2DGroup.ChartType および Chart.Chart3DGroup.ChartType を使 用して、さまざまなタイプのチャートを挿入できます。C1FlexReport でサポートされているチャートタイプには、面、横棒(水平 の棒グラフ)、縦棒(垂直の棒グラフ)、ドーナツ、散布図(X-Y 値)、折れ線、円、階段、株価、ヒストグラム、レーダー、ポーラ、 および 3D 円錐/円柱/ピラミッドチャートがあります。チャートタイプは、C1FlexReportDesigner のプロパティペインで ChartType プロパティを使用して簡単に選択できます。 面グラフ 面グラフ:面グラフでは、同じ系列のデータポイントどうしを線で結び、この線の下を塗りつぶすことで 1 つの系列が描画されま す。系列は、それぞれ前の系列の上に表示されます。 横棒および縦棒グラフ 横棒および縦棒グラフ:横棒グラフまたは縦棒グラフは、各系列を同じ色と幅の棒の集合として表し、各棒の長さは値によって 決定されます。新しい系列は、それぞれ前の系列の棒の集合の隣に棒の集合としてプロットされます。横棒または縦棒グラフ は、1 つの棒集合に各系列を 1 つの棒として描画します。棒集合の数は、データ内のポイントの数です。各集合は、各系列の n 番目のデータポイントを表示します。棒が横向きに置かれる場合は横棒グラフと呼ばれ、棒が縦向きに置かれる場合は縦 棒グラフと呼ばれます。 次の図は、横棒 横棒グラフを表します。 128 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の図は、縦棒 縦棒グラフを表します。 バブルチャート バブルチャート:バブルチャートは、2 つの独立した値を組み合わせて、ポイントの y 値とサイズを示します。バブルチャート は、各ポイントの付加的なデータ値をポイントのサイズを変えて表すために使用されます。Y 配列要素は、デカルト座標位置を 決定し(XY プロットグラフと同様)、Y1 要素値は、各ポイントのバブルのサイズを決定します。ポイントのサイズは、面積または 直径に基づいてエンコードできます。 散布図 散布図:散布図は、2 つの値を使用して各データポイントを表します。このタイプのチャートは、統計的手法によって変数間の 関係を定量化(通常、線形回帰分析)するためによく使用されます。 129 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 円グラフ 円グラフ:円グラフは、各系列を円のスライスとして描画します。円の数は、データ内のポイントの数を表します。各円は、各系 列の n 番目のデータポイントを表示します。円グラフをカスタマイズして、凡例やラベルを表示することもできます。詳細につい ては、「チャートプロパティ」を参照してください。 ドーナツグラフ: ドーナツグラフは、内径がゼロでない円グラフです。円グラフと機能的には同じですが、とりわけ 3D 効果付きで表示する際な どに見栄えをよくするために使用できます。円グラフと同様に、各ドーナツは、各データポイントの全体に対する割合として各 系列を表示します。複数のデータポイントが指定されている場合は、グラフに複数のドーナツが表示されます。 ドーナツグラフは、円グラフの InnerRadius プロパティをゼロ以外の値に設定することで作成できます。InnerRadius 値は、円 全体の半径に対する割合を表します。InnerRadius プロパティには、各チャートグループの円オブジェクトでアクセスできます。 レーダーチャート レーダーチャート:レーダーチャートは、データセットごとにレーダー線に沿って y 値を描画します(x 値は、ラベル以外は無視さ れます)。データに一意のポイントが n 個ある場合、グラフ面は、n 個の等しい角度のセグメントに分割され、360/n 度の間隔 でレーダー線(各ポイントを表す)が描画されます。デフォルトでは、最初のポイントを表すレーダー線が垂直に描画されます (90 度)。レーダーチャートはさらにカスタマイズが可能です。詳細については、「チャートプロパティ」を参照してください。 130 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 階段グラフ 階段グラフ:階段グラフは、データポイントどうしを線で結んで系列を描画する XY プロットグラフの形式の 1 つです。これらの チャートは、X の値が特定の値になると Y の値が突然変化するという、値が離散的に変化する場合によく使用されます。最も わかりやすい例としては、時間の経過に伴う小切手口座の残高の変化があります。時間の経過(X 値)と共に、預金が発生し たり、小切手が切られたりします。そのたびに、小切手口座の残高(Y 値)は、徐々にではなく突発的に変更されます。時間が 経過しても預金が発生せず小切手も切られない場合、その期間の残高(Y 値)は変わりません。 折れ線グラフ 折れ線グラフ:折れ線グラフは、データポイントをつないで各系列を描画します。これは、さまざまなデータグループ間の値の 変化を最も効率よく示す方法です。これらのグラフは、長期にわたるトレンドやパフォーマンスを示す場合によく使用されます。 株価チャート 株価チャート:株価チャートは、指定された株の始値、終値、高値、および安値を表示するために財務アプリケーションで使用 されます。株価チャートには次のようなタイプがあります。 ローソク足: ローソク足チャートは、特殊なタイプの HiLoOpenClose チャートで、始値と終値の関係、および高値と安 値の関係を示す際に使用されます。ローソク足チャートでは HiLoOpenClose チャートと同じ価格データ(高値、安値、 始値、終値)が使用されます。ただし、ローソク足チャートには太いローソク状の実体が含まれており、その色と大きさ で始値と終値の関係に関する追加情報が示されます。たとえば、長い白抜きのローソクは買い圧力を示し、長い塗りつ 131 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ぶされたローソクは売り圧力を示します。 ローソク足チャートは、ローソク、上ヒゲ、および下ヒゲで構成されています。ローソクの胴体部分(始値と終値の間の バー)は、株価の始値と終値を示しています。ローソクの上下にある細い線(上ヒゲおよび下ヒゲ)は、株価の高値/安 値の範囲を表現しています。空洞のローソクは、株価が上昇したこと(終値が始値より高い)を示しています。白抜きの ローソクでは、胴体部分の下端が始値を示し、上端が終値を示します。塗りつぶされたローソクは、株価が下降したこ と(始値が終値より高い)ことを示しています。塗りつぶされたローソクでは、胴体部分の上端が始値を示し、下端が終 値を示します。 C1Chart は、高値に対して Y 値、安値に対して Y1、始値に対して Y2、終値に対して Y3 を使用して、ローソク足チャー トを作成します。C1Chart は、線の色の値を使用して、株価の下落を表すローソクを自動的に塗りつぶします。 HiLo:: HiLo チャートは、2 つの独立した値を組み合わせて、系列内の各ポイントの高値と安値のデータを提供します。 HiLo チャートは、指定された株価の高値と安値を表示するために、主に財務アプリケーションで使用されます。HiLo チャートの各系列の Y および Y1 配列の要素が「高」値と「安」値を表します。 HiLoOpenClose:: HiLoOpenClose は、HiLo チャートに似ていますが、4 つの独立した値を組み合わせて、系列内の ポイントの高値、安値、始値、および終値を提供します。株の高値および安値を表示するほか、Y2 および Y3 配列要素 がそれぞれ株の始値および終値を表します。 ヒストグラム ヒストグラム:ヒストグラムは、生データ値のコレクションから度数分布をプロットします。これは、グループを形成するデータに よく使用され、生データのコレクションを計測して、定義された区間内に分布するデータ値の数をプロットすることで生成されま す。元の値は、ヒストグラムのデータではなく度数を生成するために使用されます。棒グラフに似ていますが、棒グラフが一般 132 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms に質的変数に使用されるのに対して、ヒストグラムは量的変数に使用されることに注意する必要があります。 ヒストグラムと棒グラフは、外観は類似していますが、機能は異なります。棒グラフがデータポイントから作成されるのに対し て、ヒストグラムはデータの度数分布から作成されます。以下のチャートは、棒グラフとヒストグラムの違いを示しています。ど ちらのチャートも、使用している Y データはまったく同じです。棒グラフ(上)は、各年の平均気温を発生年ごとに示しています。 ヒストグラム(下)は、入力として同じ気温データを使用していますが、各区間内に分布する気温の数を自動的に集計し、結果 のヒストグラムを描画しています。わかりやすいように、各区間の個数を示したグラフラベルが区間の上部に追加されていま す。 ヒストグラムは、量的変数のデータ分布にある際だった特徴を特定するために役立ちます。量的変数の重要な特性は次のと おりです。 典型的な値を明らかにします。 データは一般的な形状になります。データ値は、中央から対称に分布する場合も非対称に分布する場合もあります。 データグループから離れた値がある場合、それらは異常値として示されます。 データ値は標準値に近い場合も遠い場合もあります。 分布は、単一のピークを形成する場合と、複数のピークや谷を形成する場合があります。 チャートタイプをヒストグラムとして選択するには、[チャートグループ] [チャートグループ]→[グループ [グループ 0]]に移動し、[チャートタイプ] [チャートタイプ]を[ヒストグラ ム]に設定します。 ポーラ ポーラチャート チャート:ポーラチャートは、系列ごとに x 座標と y 座標を(theta,r)として描画します。theta は原点からの回転角度で あり、r は原点からの距離です。theta は、度(デフォルト)またはラジアンを単位として指定できます。X 軸は円なので、X 軸の 最大および最小値は固定されています。系列は、個別に描画することも、積層にして描画することもできます。ポーラチャート はさらにカスタマイズが可能です。詳細については、「チャートプロパティ」を参照してください。 133 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 3D チャート 円柱グラフ 円柱グラフ:円柱グラフは、横棒および縦棒グラフのバリエーションです。横棒または縦棒が円柱として表されます。円 柱グラフは、両端が同じ楕円形の底面になります。横棒グラフや縦棒グラフと同様に、円柱棒グラフは、個々の項目ま たは項目グループの比較に適しています。 円錐グラフ 円錐グラフ:円錐グラフは、3D 横棒および縦棒グラフのバリエーションです。横棒または縦棒が円錐として表されま す。円錐グラフの基本形は、三角形の回転体です。底面はフラットな円形で、湾曲した側面の頂点に 1 つのポイントが あります。 ピラミッドグラフ ピラミッドグラフ:ピラミッドグラフは、3D 横棒および縦棒グラフのバリエーションです。横棒または縦棒がピラミッドとし て表されます。ピラミッドグラフは、底面の形以外は円錐グラフに似ています。ピラミッドグラフは、地理的用途でよく使 用されます。 設計時サポート FlexReport のチャート チャートフィールドは、チャートを簡単に操作するための設計時サポートとして、設計時エディタとコレクションエ 134 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ディタを備えています。 チャート チャートフィールドには、次の設計時エディタを使用します。 チャートプロパティ チャートデータソース チャート視覚効果 これらのエディタを呼び出すには、チャートフィールドを右クリックし、必要なエディタを選択します。 チャートプロパティ このエディタでは、簡単な対話式の方法で新しいチャートの作成または既存のチャートの変更を行うことができます。チャート のタイプを選択するためのオプションがあります。また、チャートのヘッダー、フッター、凡例、チャート領域、およびプロット領域 の外観設定に加えて、x および y 軸の追加プロパティ設定も含まれます。[チャートプロパティ]ダイアログボックスには、開発 しているチャートのデザインを詳細に調整するためのオプションもあります。次の要素で構成されています。 [ギャラリー項目] [ギャラリー項目]:[チャートプロパティ]ダイアログボックスの左ペインの[ギャラリー項目]には、チャートのチャートタイ プやサブタイプを選択するオプションがあります。チャートタイプのすべての選択項目については、「チャートタイプ」を参 照してください。さまざまな単純なチャートタイプの中から選択することも、複合型をクリックして、チャートにさらに機能 を追加することもできます。 [単純型]タブ [単純型]タブ:[単純型]タブでは、多くの単純なチャートタイプの中から 1 つを選択できます。さらに、より特殊なチャー トの 1 つを、単純なチャートタイプの横にあるリストボックスから選択します。 135 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [複合型]タブ [複合型]タブ:[複合型]タブでは、1 つのチャートグループを使用するか、それとも 2 つのチャートグループを使用する かを指定できます。また、各グループのドロップダウンボックスで、作成するチャートのタイプを選択できます。グループ ごとに、グループを積み重ねるか、3D にするかなどを選択できます。 メモ:[グループ 1]のデータに対してチャートタイプを選択しないと、[チャートプロパティ]ダイアログボックスの左ペイン のリストボックスに、[グループ 1]のデータの要素は表示されません。 チャートデータソース チャートデータエディタで、チャートデータからデータを設定することでチャートを連結できます。チャート内のデータ系列を追加 または削除し、各データ系列のラベルおよび色を指定し、[積み重ねデータの表示]チェックボックスをオンにしてデータを積み 上げることができます。 チャート視覚効果 136 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 視覚効果は、データ系列、ヘッダー、フッターなどの Chart2D コントロールの要素を視覚的に機能拡張するために使用する ツールです。既存のすべてのプロジェクトで、このツールが提供する新しい機能を使用できます。[視覚効果]デザイナからいく つかの簡単な手順を実行することで、チャートの外観を劇的に改善できます。 チャート チャートフィールドには、次のコレクションエディタを使用します。 ValueLabel コレクションエディタ コレクションエディタ:このコレクションエディタには、[プロパティ]ペインの[チャート領域] [チャート領域]→[軸 [軸 X]]→[値ラ [値ラ ベル] ベル]からアクセスできます。詳細については、ValueLabel コレクションエディタのドキュメントを参照してください。 ChartDataSeries コレクションエディタ コレクションエディタ:このコレクションエディタには、[プロパティ]ペインの[チャートグループ] [チャートグループ]→[グ [グ ループ 0]]→[チャートデータ] [チャートデータ]→[カテゴリグループ] [カテゴリグループ]からアクセスできます。詳細については、ChartDataSeries コレク ションエディタのドキュメントを参照してください。 ChartLabel コレクションエディタ コレクションエディタ:このコレクションエディタには、[プロパティ]ペインの[チャートラベル] [チャートラベル]→[デフォルトラ [デフォルトラ ベルスタイル] ベルスタイル]→[ラベルコレクション] [ラベルコレクション]からアクセスできます。詳細については、Label コレクションエディタのドキュメント を参照してください。 ChartVisualEffectsStyle コレクションエディタ コレクションエディタ:このコレクションエディタには、[プロパティ]ペインの[視覚効果] [視覚効果]→[ス [ス タイル] タイル]からアクセスできます。詳細については、VisualEffectsStyle コレクションエディタのドキュメントを参照してくださ い。 チャートデータのプロット 137 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 単純な 2D チャートをプロットする手順は次のようになります。 1. 2. 3. 4. 5. 6. 7. C1FlexReportDesigner アプリケーションを開きます。 C1FlexReport ウィザードを使用して新しいレポートを作成するか、既存のレポート定義を開きます。 詳細セクションにチャート チャートフィールドを追加します。 チャートフィールドを右クリックし、[チャートプロパティ] [チャートプロパティ]→[単純型] [単純型]→[横棒] [横棒]を選択します。 チャートフィールドを右クリックし、[チャートデータソース] [チャートデータソース]を選択します。 [単純な 2D チャート] チャート]をクリックし、[単純な [単純な 2D チャートの生成] チャートの生成]チェックボックスをオンにします。 チャートの X および Y 値を指定します。 たとえば、表示されているチャートは、C1NWind.mdb データベースの Products テーブルを使用して作成されており、以下の プロパティが設定されています。 チャートタイプ チャートタイプは「横棒」 チャートの X および Y 値はそれぞれ「CategoryID」と「UnitPrice」 系列ラベルを次の手順で追加します。 1. [2D チャートグループ 0]]を選択し、[系列値] [系列値]を選択します。 2. [系列ラベル] [系列ラベル]を「CategoryID vs UnitPrice」と指定します。 凡例を次の手順で追加します。 1. プロパティペインに移動します。 2. [凡例] [凡例]→[テキスト] [テキスト]で凡例名を「Legend」、[凡例] [凡例]→[表示] [表示]を True に設定します。 次の手順でチャートにタイトルを追加します。 1. プロパティペインに移動します。 2. [タイトル] [タイトル]→[ヘッダー] [ヘッダー]を選択し、ヘッダーテキストを「Header」、[タイトル] [タイトル]→[ヘッダー [ヘッダー]]→[[表示] 表示]を True に設定しま す。 3. [タイトル] [タイトル]→[フッター] [フッター]を選択し、フッターテキストを「Footer」に設定して、チャートにヘッダーとフッターを追加します。 チャートに軸タイトルを追加したり、チャート領域に背景色や境界線を追加することもできます。チャートをカスタマイズするため に使用するプロパティの詳細については、2DChart のドキュメントを参照してください。 3D チャートタイプを使用して、3 次元データを 3D 面グラフ、3D 棒グラフなどの形式で表すことができます。2D チャートから 3D チャートをプロットするには、VisualizationType プロパティを Chart3D に設定します。3D チャートのプロットの詳細につい ては、3DChart のドキュメントを参照してください。 非連結チャートでのデータのプロット FlexReport では、データソースにチャートを連結しなくても、チャートにデータを追加できます。非連結モードで直接 X および 138 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Y の値の配列を設定して、チャートに系列をプロットして表示できます。次の手順を実行して、非連結 2D チャートを追加してみ ます。 1. C1FlexReportDesigner アプリケーションで、C1FlexReport ウィザード ウィザードを使用して新しいレポートを作成するか、既存 のレポート定義を開きます。 2. 詳細 詳細セクションにチャート チャートフィールドを追加します。 3. プロパティ プロパティウィンドウで[[ChartGroups|Group0|ChartType]]を展開し、[ChartType]ドロップダウンからチャートタイプ を選択します。この例では、横長グラフタイプを選択します。 4. [ChartGroups|Group0|ChartData]]に移動し、UnboundSeriesList プロパティの隣にある省略符ボタンをクリックし ます。 5. ChartUnboundDataSeries コレクションエディタ コレクションエディタで、チャートにプロットする系列の数を追加します。ここでは、2 つの 系列を追加しました。 6. 系列の一方を選択し、SeriesData プロパティの隣にある省略符ボタンをクリックします。 7. 系列データのエディタで、データを入力します。 8. [OK]]をクリックして、エディタを閉じます。 9. [プレビュー] [プレビュー]ボタンをクリックしてプレビューモードに切り替え、レポートを表示するプレビューモードを開始します。 3D 非連結チャートの場合は、次の手順を実行します。 1. 詳細 詳細セクションにチャート チャートフィールドを追加します。 2. プロパティ プロパティウィンドウで[[ChartGroups|Group0|ChartType]]を展開し、[ChartType]ドロップダウンからチャートタイプ を選択します。この例では、面グラフタイプを選択します。 3. [ChartGroups|Group0|ChartData|UnboundData|GridSet]]に移動します。 4. 必要に応じて、ColumnCount および RowCount プロパティを目的の値に設定します。ここでは、ColumnCount と RowCount の両方のプロパティを 0 に設定します。 5. GridData プロパティの横にある省略符ボタンをクリックします。 6. 1 次元配列エディタ 次元配列エディタでデータを入力し、閉じます。 7. [プレビュー] [プレビュー]ボタンをクリックしてプレビューモードに切り替え、レポートを表示するプレビューモードを開始します。 139 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 複数の系列を持つチャート 場合によっては、複数のデータセットまたは複数の系列を持つチャートを作成する必要があります。このようなチャートを作成 するには、各系列の値を設定する必要があります。 例として、C1Nwind.mdb データベースの Products テーブルで、カテゴリ ID(Category ID)に対応する単価(Unit Price)、在 庫数(Units in Stock)、および追加注文レベル(Reorder Level)を表示することにします。次の手順で、このシナリオを実現で 140 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms きます。 1. チャート チャートフィールドを右クリックし、[チャートデータソース] [チャートデータソース]を選択します。 2. [2D チャートグループ 0]]をクリックし、[系列値] [系列値]をクリックします。 3. プラス記号をクリックし、選択した[系列ラベル] [系列ラベル]を指定し、ドロップダウンリストから[値] [値]を指定します。[スタイル] [スタイル]タブ の[塗りつぶし] [塗りつぶし]オプションから、系列に色を追加することもできます。この例では、複数系列チャートに対して次のデー タを指定しました。 2. 3. 4. 5. 系列ラベル 値 スタイル|塗りつぶし Unit Price UnitPrice 青紫 Units in Stock UnitsinStock ペールターコイズ Reorder Level ReorderLevel 濃いピンク 凡例を作成するには チャート チャートフィールドを右クリックします。 [チャートプロパティ] [チャートプロパティ]を選択します。 [外観] [外観]→[凡例] [凡例]に移動します。 [表示] [表示]チェックボックスをオンにし、[テキスト] [テキスト]として「Legend」と記述します。 グループ化されたレポート内のチャート FlexReport for WinForms では、複数のグループを持つレポートを作成できます。たとえば、1 つの単純なレポートにすべて の製品をリストするのではなく、製品をカテゴリ別にグループ化できます。各グループには、ヘッダーセクションとフッターセク ションがあり、グループのタイトルや小計などの情報を表示できます。 グループヘッダーにチャートを追加すると、そのチャートには現在のグループのデータだけが表示されます。それに対して、レ ポートヘッダーやレポートフッターにチャートを追加すると、そのチャートにはレポートのすべてのデータが表示されます。 次に、レポートデザイナに表示されるレポート定義の模式図を示します。これは、レポートヘッダーとグループヘッダーにそれ ぞれチャート チャートフィールドを追加した場合の効果も示しています。 レポートヘッダーセクション ここに追加されたチャートフィールドは、 レポート全体に対して 1 つのチャートを生成します。 このチャートは、レポートのデータソース内の すべてのデータを表示します。 ページヘッダーセクション グループヘッダーセクション( グループヘッダーセクション(CategoryName)) ここに追加されたチャートフィールドは、 CategoryName 値ごとに 1 つのチャートを生成します。 各チャートは、現在の CategoryName 内の すべてのデータを表示します。 詳細セクション グループフッターセクション( グループフッターセクション(CategoryName)) ページフッターセクション レポートフッターセクション 141 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms この例を使用して、各カテゴリのレポートデータをチャートで視覚化してみます。 チャート チャートフィールドをグループヘッダーセクション(CategoryName)に追加し、「チャートデータのプロット」の説明に従って チャートを作成します。チャートの X および Y 値として ProductName および UnitPrice を指定し、UnitPrice として[系列 [系列 値] 値]の[値] [値]を指定します。 次の画像は、このレポートのスクリーンショットです。グループヘッダー、グループヘッダー内のチャート、およびいくつかの詳 細レコードが表示されています。 上のチャートは、"Condiments" カテゴリ内の製品の単価を示しています。下のチャートは、"Confections" カテゴリ内の製品 の単価を示しています。 142 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport カスタムフィールドの追加 FlexReport のカスタムフィールドは、C1.Win.FlexReport.CustomFields.4 アセンブリにあります。独自のカスタムフィールド を作成し、それを Report Designer パレットに追加できます。それには、次の作業が必要です。 1. C1.Win.FlexReport.CustomFields から派生されたカスタムフィールドクラスを作成します。 2. カスタムフィールドアセンブリを C1FlexReportDesigner.4.exe.settings に登録します。 たとえば、MyField カスタムフィールドを登録するには、次のように、C1FlexReportDesigner.4.exe.settings ファイルの <customfields> セクションにコントロールを追加します。 <customfields> <!-- この行はデザイナに新しいフィールドを追加します --> <item value="MyCustomFieldAssembly;MyCustomFieldAssembly.MyField" /> </customfields> 上記のコードは、フィールドが "MyField" という名前で、"MyCustomFieldAssembly" という名前のアセンブリに含まれている と仮定しています。また、MyCustomFieldAssembly は、デザイナと同じフォルダにある必要があります。 次は、FlexReportDesigner アプリケーションにデフォルトでロードされる組み込みの標準カスタムフィールドです。 SuperLabel Maps これらのカスタムフィールドを実装するためのソースコードは次のようになります。 <customfields> <item value="C1.Win.FlexReport.CustomFields;C1.Win.FlexReport.CustomFields.SuperLabel" /> <item value="C1.Win.FlexReport.CustomFields;C1.Win.FlexReport.CustomFields.Map" /> </customfields> 143 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms マップカスタムフィールド FlexReport は、高い拡張性を持つカスタムフィールドアーキテクチャを使用してマップフィールドをサポートします。以下のト ピックでは、FlexReportDesigner アプリケーションを使用してレポート内のマップフィールドをカスタマイズする方法を説明し ます。 マップカスタムフィールドは、 2 つのアセンブリ、C1.WPF と C1.WPF.Maps を使用します。開始する前に、これらのアセンブリ が使用でき、プロジェクトから参照できるようにしてください。 FlexReportDesigner アプリケーションでマップカスタムフィールドの使用を開始するには、次の手順を実行します。 1. C1FlexReportDesigner アプリケーションを実行します。 2. C1FlexReportDesigner ツールバーにマップアイコンがあることを確認します。アイコンがない場合 は、C1FlexReportDesigner.4.exe.settings ファイルの <customfields> セクションに次の行を追加する必要があり ます。 <item value="C1.Win.FlexReport.CustomFields.4;C1.Win.FlexReport.CustomFields.Map" /> 3. 新しいレポートを作成するか、既存のレポートを開きます。例については、「手順 1/4:レポート定義の作成」を参照して ください。 4. マップアイコンをクリックし、レポートまでドラッグしてマップフィールドを追加します。 これで終わりです。マップフィールドには主に次の要素があります。 タイルレイヤおよびデータレイヤ 凡例 スタイル 式 自動ズーム/中央揃えおよびデータ追跡 C1FlexReport 定義にマップフィールドが含まれ、レポートが非同期に生成されると、マップフィールドを C1FlexViewer コ ントロールに表示することができません。この回避策として、C1FlexViewer.UseAsyncRendering プロパティを False に設定してください。 マップカスタムフィールドのプロパティ 以下のセクションでは、マップカスタムフィールドの重要なプロパティについて説明します。 レイヤ マップのメイン部分は、地球表面またはその一部を表すラスターグラフィックを提供するタイルレイヤと、空間データを表す 0 個以上のレイヤから成ります。 タイルレイヤは、TileSource プロパティによって指定されます。これは、VirtualEarth タイルソース(道路、航空、または混合 ソース)に設定できます。タイルソースは「none」に設定でき、その場合、マップ上にタイルは描画されません。これは、特に KML などの他のレイヤがマップの視覚化に十分なデータを提供する場合に役立ちます。 タイルソースが「none」でない場合、タイルはレポートの実行時にネットワーク上の場所からロードされます。これは、かなり低 速である場合があります。 タイルレイヤ以外のレイヤは、Layers コレクションに格納されます。現在、次の 3 つのレイヤタイプがサポートされています。 ポイント ポイント。「ポイント」レイヤを使用すると、空間データをマップ上のポイントとして表示できます。「ポイント」レイヤでは、 データ行ごとに 1 つのマーカーが描画されます。 線。「線」レイヤは、データ行ごとに 1 本の直線を 2 ポイント間に描画します。 KML レイヤ レイヤ。KML(Keyhole マークアップ言語)は、さまざまな地理情報の記述を可能にする XML ベースの言語で す。KML の詳細については、http://en.wikipedia.org/wiki/Keyhole_Markup_Language を参照してください。KML レ イヤを使用すると、ローカルまたは Web ベースの KML ファイルをマップにロードして表示できます。 144 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms トラッキング マップフィールドによって表示されるマップは、マップ上に表示されるデータを自動的に中央揃えおよびズームインできます。こ の動作は次の 2 つの要素によって決定されます。 マップフィールド全体に指定される AutoCenter プロパティと AutoZoom プロパティの値、および自動的な中央揃え/ ズームを微調整するためのいくつかの関連プロパティ (AutoZoomPadLon、AutoZoomPadLat、MaxAutoZoom、RoundAutoZoom)。 データが「トラッキング」される場合は、レイヤによって表される空間データ。トラッキング(空間データの特定の部分を 自動的な中央揃えとズームに使用するかどうかなど)は、レイヤの Track プロパティによって決定されます。また、KML レイヤの場合は、特定の KML 項目をトラッキングするかどうかを決定する式を指定できます。 スタイル マップ要素の視覚属性は主にスタイルによって定義されます。スタイルにはいくつかの種類があります(ポイントマーカー スタイル、線スタイル、KML 項目スタイル)。適用可能な種類は、たとえば、ポイントレイヤはポイントマーカースタイルを 使用し、線レイヤは線スタイルを使用するというように、コンテキストによって決まります。通常、スタイルは、データ依存の 式(実際のスタイルが実行時のデータによって決まる)として指定され、デフォルトで使用されるフォールバックスタイルを 持ちます。スタイル式の指定および評価方法について次に説明します。 マップカスタムフィールドには、次の 3 つのスタイルコレクションが含まれます。 MarkerStyles LineStyles KmlItemStyles これらのスタイルは、マップ マップ上に定義されているすべてのレイヤと、現在のレポート内の他のマップ マップフィールドでも使用できま す。各コレクション内のスタイルは、インデックス、または名前(Name プロパティを使用。推奨)のいずれかによってアクセス可 能です。スタイル式が文字列と評価された場合は、その文字列を使用して一致するスタイルが検索されます。最初は、現在の マップを検索し、これが失敗した場合は、現在のレポート内の他のすべてのマップを検索します(種類が一致するスタイルだけ が検索されます。たとえば、ポイントマーカースタイルの場合は、MarkerStyles コレクションだけが検索されます)。 空間位置 ポイントおよび線レイヤでは、データの空間位置を次の 2 つの方法で指定できます。 実行時に経度/緯度ペアとして評価される 2 つの式として。通常、これらは、データソースに格納された対応するデータ フィールド(経度と緯度)を直接参照します。 MapLocation として。これは、1 つの文字列として評価される式(または式リスト)です。この文字列から、外部のオン ラインサービス(Google マップ)を使用して、対応する空間位置を取得できます。指定した MapLocation にセミコロン が含まれる場合は、セミコロン区切りの式リストとして扱われます。式はそれぞれ個別に評価された後、結合されてクエ リーとして使用されます。典型的な MapLocation は次のようになります。 "Address;City;PostalCode;Country" これは、Address、City、PostalCode、Country の各フィールドをデータソースから取得した後、それらを結合して、外部 サービスへのクエリーを実行します。 MapLocation の使用は、インターネットアクセスに非常に時間がかかる場合があることに注意してください。そのた め、デフォルトでは、取得された空間データはローカルディスクファイルに格納されます。このファイルのパス は、Map.GeoCachePath プロパティで指定されます。デフォルトでは、このファイルの名前は「geocache.xml」で、レ ポート定義と同じディレクトリに格納されます。ジオキャッシングの無効化は推奨されません。 ポイントレイヤ ポイントレイヤを使用すると、データソースのレコードごとに 1 つずつ、ポイント位置マーカーが表示されます。マーカーの位置 は、「空間位置」で説明したように、経度/緯度ペア、または MapLocation によって指定されます。以下に、ポイントレイヤの 重要な側面を説明します。 145 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms データアクセス: データアクセス:実行時にポイントレイヤが処理される際は、レコードソース(レイヤ自身の DataSource が指定されて いる場合はそのレコードソース、または現在のグループによってフィルタ処理されたレポートのレコードソースのいずれ か)内をループして、データレコードごとにマークが描画されます。 ビジュアルスタイル: ビジュアルスタイル:ポイントマーカーの外観は、適用されるマーカースタイルによって決まります。ポイントレイヤには、 マーカーの形状、色などを指定できるデフォルトの MarkerStyle プロパティが提供されています。MarkerStyleExpr 式を指定することもできます。この場合、実行時にデータレコードごとにこの式が評価され、一致するマーカースタイル が現在のマップの MarkerStyles コレクション内で見つかるか、またはレポート内の他のマップのコレクション内で見つ かった場合は、デフォルトではなく、そのスタイルが適用されます。(前述のように、スタイル式は、スタイルコレクション 内のスタイル名に一致する文字列として評価される必要があります。) クラスタ化: 複数のポイントマーカーが互いに近接している場合は、それらを 1 つのマーカーに「クラスタ化」できます。 このマーカーには、それが表しているクラスタ化ポイントマーカーの数が常に表示されます。クラスタマーカーには、ポ イントマーカーと異なるビジュアルスタイルを設定でき、表しているポイントの数に応じて視覚スタイルを変えることもで きます。クラスタスタイルはポイントレイヤの ClusterStyles コレクションによって指定されます。複数のスタイルが提供 されている場合は、クラスタのサイズによって特定のスタイルが決定されます。関連するポイントレイヤのプロパティ は、ClusterDistance、ClusterDistribution、ClusterStyles です。 トラッキング: Track プロパティが True の場合は、レイヤのすべてのポイントが自動的な中央揃えおよびズームの対 象となります。 線レイヤ 線レイヤを使用すると、マップ上のポイント間に線が描画されます。2 つのポイントを結ぶ線が、データレコードごとに 1 本ずつ 描画されます。各ポイントの空間位置は、ポイントレイヤと同じ方法で指定できます。つまり、2 つの経度/緯度ペア(線の端に 1 つずつ)、またはオンラインサービスへの位置の要求に使用される 2 つの MapLocation によります。以下に、線レイヤの 重要な側面を説明します。 データアクセス: データアクセス:ポイントレイヤと同様に、線レイヤでは、レイヤ自身の DataSource を指定するか、現在のグループに よってフィルタ処理されたレポートのレコードソースを使用できます。 ビジュアルスタイル: ビジュアルスタイル:スタイルは、おおよそポイントレイヤと同じ方法で処理されますが、MarkerStyles ではなく LineStyles コレクションが使用されます。 トラッキング: Track プロパティが True の場合は、レイヤのすべての線が自動的な中央揃えおよびズームの対象とな ります。 KML レイヤ KML レイヤは、KML(Keyhole マークアップ言語)または KMZ(圧縮された KML)ファイルをマップ上にレンダリングします。 ファイル名は、レイヤの KmlFileName プロパティによって指定されます。このファイルは、URL やローカルディスクファイルか らロードしたり、レポートに埋め込むことができます。ファイルが埋め込まれておらず(EmbedKmlFile が False)、ディレクトリ が指定されていない場合は、レポート定義を格納するディレクトリからファイルがロードされます。 KML 項目式: 項目式:KML レイヤがレンダリングされる際は、KML ファイル内にある項目が順に処理されます。項目がロード されるたびに、レイヤ上で指定されている複数の式が評価され、これによって処理を制御できます。たとえば、さまざま な条件に基づいて特定の項目だけをロードしたり、項目の視覚属性だけを変更することができます。また、KML レイヤ に対して DataSource が指定されている場合は、項目式を評価する前に、データを KML 項目ごとにフィルタ処理でき ます。以下では、KML 項目式の評価にかかわるプロパティについて詳しく説明します。すべての式で、現在処理中の KML 項目名を参照する特別な変数 kmlItemName を使用できることに注意してください。 ItemFilterExpr:: KML レイヤで DataSourceが指定されている場合にのみ、他の式を評価する前に、取得されたデー タにこのフィルタが適用されます。たとえば、レイヤのレコードソースに Country フィールドが含まれ、KML ファイルに 国の項目が含まれている場合、次のフィルタは、 kmlItemName=Country KML 項目ごとに、他の項目式が現在の項目の国に対応するデータを使用して評価されるようにします。 ItemTrackExpr:: 指定された場合は、項目を使用してマップを自動的に中央揃え/ズームするかどうかを決定します。 空のままにすると、true と見なされます。 ItemVisibleExpr:: 指定された場合は、項目の表示/非表示を決定します。空のままにすると、true と見なされます。 ItemStyleExpr:: この式が(現在のマップまたはレポート内の他の任意のマップの)KmlItemStyles コレクション内の 有効なスタイル名として評価された場合は、このスタイルが項目に適用されます。これは、たとえば、州の合計注文数 などのデータ値に応じて、各州を異なる色で塗りつぶす場合に使用できます。 ItemStyle.ItemNameExpr::KML 項目スタイル自身が、1 つの計算されたプロパティとして、項目の名前を保持してい 146 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ます。これを使用して、マップ上にレンダリングされる名前を隠したり、それをレポートデータ(合計注文数など)に置き 換えることができます。 凡例 マップは、関連する凡例をマップ境界内にレンダリングできます。凡例をマップの境界の外に簡単に配置できるように、凡例を レポート内の任意のマップフィールドに関連付けることができます。これにより、別のマップを説明する凡例を保持するだけの 空のマップフィールドを追加できます。 凡例は、マップ マップフィールドの Legends コレクション内に格納されます。凡例を追加するには、このコレクションに項目を追加し ます。マップの境界内の凡例の位置は、LegendAlignment プロパティによって決定されます。Orientation は、凡例内の項 目を垂直方向(デフォルト)と水平方向のどちらで配置するかを決定します。他のいくつかのプロパティを使用して、凡例の外 観を微調整できます。 凡例内の項目は Items コレクションによって表されます。凡例の Automatic プロパティが True に設定されている場合、この コレクションには、現在のマップの KML 以外のレイヤからデータを自動的に挿入できます。その場合、Items コレクションは編 集できません。それ以外の場合は、凡例項目を手動で追加する必要があります。 次のタイプの凡例項目がサポートされています。 LegendLayerStyleItem:レイヤスタイルを表します。デザイナで、凡例項目によって表される既存のレイヤまたはスタ イルを選択できます。選択したレイヤスタイルに応じて、凡例項目はポイントマーカー(ポイントレイヤ/スタイルの場 合)、線(線レイヤ/スタイルの場合)、または色見本(KML 項目スタイルの場合)を表します。 LegendColorSwatchItem:任意の色見本を表します。 LegendTextItem:任意のテキストを表します。 マップカスタムフィールドの追加 マップ マップフィールドの基礎を理解できたので、ここでは、都市ごとに集計された従業員、納入業者、顧客を表示するレポートにマップを追 加します。 次の手順を実行します。 1. 基本のレポートを作成します。 デザイナで新しいレポートを追加し、データソースとして C1NWind.mdb を指定して、次の SQL クエリーを使用します。 Customers and Suppliers by City 2. メインマップを追加します。 マップをレポートのヘッダーに追加します。 レポートデザイナで、ヘッダーの下端を下方向にドラッグして、マップのための領域を空けます。 マップカスタムフィールドアイコン(地球儀)をクリックし、ヘッダー上にドラッグします。 3. マップのプロパティを調整します。 マップのプロパティを次のように設定します(以下はデフォルト値以外のみ)。 AutoCenter:False AutoZoom:False CenterLatitude:10 CenterLongitude:15 ShowScale:True TileSource:VirtualEarthAriel ZoomLevel:.55 4. レイヤを追加します。 Layers コレクションの横にある楕円ボタンをクリックして、LayerBase コレクションエディタ コレクションエディタを開きます。メンバ「Employees」、 「Suppliers」、および「Customers」を追加し、それぞれのプロパティを次に示すように設定します。 147 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 設計領域は次のようになります。 148 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 5. レポートをプレビュー表示します。 149 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms SuperLabel カスタムフィールド SuperLabel フィールドは、レポートに HTML テキストを挿入するために使用されます。 マップカスタムフィールドの追加で作成したレポートに SuperLabel フィールドを追加してみます。 1. 2. 3. 4. レポートを開きます。 ページヘッダーの Visible プロパティを True に設定します。 SuperLabel フィールドをレポートのページヘッダーセクションにドロップします。 プロパティペインで、Text プロパティを次のテキストに設定します。 SuperLabel.Text 150 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms <html><body><font color="Red">Customers and Suppliers by City</font></body> </html> 5. デザイナには、SuperLabel フィールドが次のように表示されます。 6. レポートをプレビュー表示します。 151 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms パラメータの操作 パラメータの使用 FlexReport のレポートパラメータを使用して、以下のタスクを実行できます。 データ連結 計算フィールドの式の作成 サブレポートの作成 152 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 複数値パラメータの追加によるフィールドへの複数値の受け渡し レポートへの値の暗黙的な受け渡し カスケードパラメータを使用した大量データの管理 レポートへのパラメータの追加 レポートにパラメータを追加する手順は次のとおりです。 1. C1FlexReportDesigner.exe アプリケーションを実行します。 2. 新しいレポートを作成します。レポートをデータソースに連結します。これはメインデータソースです。レポートが設計 モードで開かれます。 3. [データ] [データ]タブをクリックします。 4. [データソース] [データソース]を右クリックし、[データソースの追加] [データソースの追加]をクリックして、パラメータを指定するためのデータソースを追加 します。レポートに追加するパラメータと同じ数のデータソースを追加します。詳細については、「複数のデータソースの 追加」を参照してください。 5. [パラメータ] [パラメータ]を右クリックし、コンテキストメニューから[パラメータの追加] [パラメータの追加]を選択します。 6. パラメータを使用して実行するタスクに応じて、[プロパティ] [プロパティ]ペインからパラメータのプロパティを設定します。 153 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms この後のセクションでは、パラメータを使用して実行できるさまざまなタスクについて説明します。 データ連結 レポートパラメータでデータ連結を実行するには、次の手順に従います。 2. C1FlexReportDesigner.exe アプリケーションを実行します。 3. 新しいレポートを作成します。レポートをデータソースに連結します。これはメインデータソースです。レポートが設計 モードで開かれます。 4. [データ] [データ]タブをクリックします。 5. [データソース] [データソース]を右クリックし、[データソースの追加] [データソースの追加]を選択します。[データソース] [データソース]ダイアログボックスが表示されま す。 6. DataSource1 などのデータソース データソースを選択し、新しいデータソースを作成して、[接続]、[データプロバイダ]、[接続文字 列]などを設定します。 7. [プロパティ] [プロパティ]ペインから Name プロパティを設定することで、DataSource1 の名前を変更できます。ここでは、Name を dsCategories に変更しました。 8. [パラメータ] [パラメータ]を右クリックし、[パラメータの追加] [パラメータの追加]を選択して、パラメータを追加します。 9. [プロパティ] [プロパティ]ペインで、AllowedValuesDefinition の横にある省略符ボタンをクリックしま す。[[AllowedValuesDefinition エディタ] エディタ]ダイアログボックスが表示されます。 154 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 10. 図のように、[データソースから] [データソースから]ラジオボタンを選択し、データソースをパラメータに連結するために[データソース]、 [ラベル]、および[値]を選択します。[OK]をクリックします。 11. [プロパティ] [プロパティ]ペインから、DataType を[[AllowedValuesDefinition エディタ] エディタ]の[値] [値]のデータタイプと同じ値に設定し ます。ここでは、Value=CategoryID は整数なので、DataType を整数に設定します。 計算フィールド 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 155 C1FlexReportDesigner.exe アプリケーションを実行します。 新しいレポートを作成します。それを Products テーブルに連結します。レポートが設計モードで開かれます。 [データ] [データ]タブをクリックします。 [データソース] [データソース]を右クリックし、[データソースの追加] [データソースの追加]を選択します。[データソース] [データソース]ダイアログボックスが表示されます。 別のデータソースを追加し、それを Products テーブルに連結します。このデータソースはパラメータ用として追加します。この データソースの名前を「dsProducts」と指定します。 [パラメータ] [パラメータ]を右クリックし、[パラメータの追加] [パラメータの追加]を選択して、パラメータ Parameter0 を追加します。 [プロパティ] [プロパティ]ペインで、AllowedValuesDefinition の横にある省略符ボタンをクリックします。[[AllowedValuesDefinition エディタ] エディタ]ダイアログボックスが表示されます。 [データソースから] [データソースから]ラジオボタンを選択し、[データソース]として[dsProducts]、[ラベル]として[ProductName]、および[値] として[ProductName]を選択します。[[OK]]をクリックします。 もう 1 つのパラメータ Discount を追加します。 メインデータソースを編集します。次の SQL 文を記述します。 Select * from Products where ProductName=Parameter0 [挿入] [挿入]タブで、[フィールド]グループから計算 計算フィールドを追加します。VBScript エディタ エディタが開きます。 エディタで次の式を入力します。 UnitPrice*Discount 計算フィールドを詳細セクションにドロップします。また、ページヘッダーセクションに、「Discounted Price」を表示するためのテ キストフィールドを追加します。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 14. レポートをプレビュー表示します。Parameter0 から製品名を選択し、Discount パラメータに割引値を入力します。[パラメータ [パラメータ の適用] の適用]をクリックすると、割引された価格が計算されます。 サブレポート サブレポートは、メインレポートに存在するデータに関する追加情報を表示する場合に便利です。レポートにパラメータを渡すように、 156 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms サブレポートにパラメータを渡して、サブレポート内のデータ値間の関係を形成することもできます。 たとえば、メインレポート内に並べてレンダリングされるサブレポートにデータをフェッチするとします。このようなシナリオを実現するに は、次の手順に従います。 1. 2. 3. 4. 5. 6. 7. C1FlexReportDesigner.exe アプリケーションを実行します。 非連結モードで、メインレポートの新しいレポート定義を作成します。 もう 1 つのレポートを作成し、それを C1NWind.mdb にある Photos レポートに連結します。 [挿入] [挿入]タブからサブレポート サブレポートフィールドをクリックします。利用できるレポートがすべて表示されます。 2 つのサブレポート サブレポートフィールドをドロップして横に並べます。 2 つのパラメータを追加します。これらのパラメータは、2 つのサブレポートに 1 つずつ渡されます。 Name プロパティからパラメータ名を設定します。左側のサブレポートのパラメータを「prmLeftPlace」に、右側のサブレポート のパラメータを「prmRightPlace」にします。 8. パラメータのデータソースを追加し、データプロバイダと接続文字列を設定します。パラメータに値を渡すために使用される SQL 文を記述します。たとえば、Photos レポートから Place を選択するには、次のようになります。 select distinct Place from Photos order by Place 9. 2 つのパラメータに対して AllowedValuesDefinition プロパティを設定します。a. AllowedValuesDefinition の横にある省略符ボタンをクリックします。 b. [AllowedValuesDefinition エディタ] エディタ]ダイアログボックスで、[データソースから] [データソースから]ラジオボタンを選択します。 c. データソースをパラメータに連結するために、[データソース]、[ラベル]、および[値]を選択します。 10. 各パラメータの Prompt プロパティからプロンプトテキストを設定します。 11. サブレポート Photos を選択し、[データ]タブをクリックします。 12. データソースを編集し、次の SQL 文を記述します。 select distinct Place from Photos order by Place 13. メインレポートを選択し、左側のサブレポートフィールドをクリックします。横の省略符をクリックすると、[[ParameterValues エ ディタ] ディタ]が表示されます。次のように名前と値を設定します。 14. 同様に、右側のサブレポートフィールドに対して、[名前] [名前]を「prmPlace」、[値] [値]を「prmRightPlace.Value」に設定します。デザイ ンビューでは、次の図のようにレポートが表示されます。 15. レポートをプレビュー表示します。 157 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 2 つのパラメータプロンプト(2 つのサブレポートに 1 つずつ)に値(場所)のリストが表示されていることがわかります。値を選択 し、[パラメータの適用] [パラメータの適用]をクリックします。ここでは、左側のサブレポートで Chaumont、右側のサブレポートで Cote d'Azur を選択し ました。 パラメータのカスケード カスケードパラメータは、一方のパラメータの値のリストがもう一方のパラメータで選択されている値に依存する場合に使用さ れます。したがって、パラメータは 2 つ存在します。一方のパラメータのデータ値をリストするために使用されるデータソース が、もう一方のパラメータによって変更されます。 たとえば、選択されたカテゴリに属する製品リストから製品を選択する場合は、以下を実行する必要があります。 1. 新しいレポートを作成します。そのレポートを C1NWind.mdb 内の Order Details に連結します。 2. 2 つのデータソース(2 つのパラメータに 1 つずつ)を追加します。 パラメータ prmCategory に値を渡すための dsCategory パラメータ prmProduct に値を渡すための dsProduct 3. dsCategories を右クリックし、[編集] [編集]を選択してデータソースを編集します。データプロバイダと接続文字列を設定し、 158 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の SQL 文を記述します。 select * from categories 4. dsProducts に対して上記の手順を繰り返します。次の SQL 文を記述します。 select * from products where categoryid = prmCategory 5. メイン メインデータソースを右クリックし、[編集] [編集]を選択し、メインデータソースに対する SQL 文を記述します。 select * from [order details] where productid = prmProduct 6. 2 つのパラメータを追加します。 カテゴリを選択するための prmCategory prmCategory パラメータで選択されたカテゴリに属する製品を選択するための prmProduct 7. 次のように、2 つのパラメータに対して AllowedValuesDefinition プロパティを設定します。 prmCategory prmProduct データソース dsCategory dsProduct ラベル CategoryName ProductName 値 CategoryID ProductID 8. [プレビュー]をクリックします。 159 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms カテゴリを選択すると、そのカテゴリ内の製品のリストが、もう 1 つのパラメータに表示されます。次に、製品を選択し、[パラ [パラ メータの適用] メータの適用]をクリックします。ここでは、Condiments カテゴリに含まれる Aniseed Syrup 製品のデータが表示されていま す。 複数値パラメータ 複数値パラメータは、1 つのパラメータに対して複数の値を渡すことができるパラメータコレクションです。ユーザーは、データ のリストから複数のデータを選択できます。 FlexReportDesigner アプリケーションでは、Parameter.MultiValue を True に設定することで、パラメータを複数値にするこ とができます。 160 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 複数値パラメータのあるレポートをプレビューすると、そのパラメータに連結された値のリストが表示されます。ここから、レ ポートにレンダリングする値を選択できます。 パラメータの暗黙的な受け渡し パラメータを暗黙的に渡すことで、レポートのレンダリング中に、ユーザープロンプト(ユーザー操作)なしでパラメータの値を渡 すことができます。 パラメータを暗黙的に渡すには、パラメータプロパティを定義し、Parameter.Hidden プロパティを True に設定します。 複数のデータソースの追加 FlexReport 定義には、複数のデータソースを設定することができます。FlexReportDesigner を使用してレポートに新しいデー タソースを追加することは、とても簡単です。メインデータソースに連結された既存のレポートにデータソースを追加する手順 161 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms は、次のとおりです。 1. [データ] [データ]タブをクリックします。 2. [データソース] [データソース]ノードを右クリックします。 3. [データソースの追加] [データソースの追加]を選択します。 または 1. [ホーム] [ホーム]タブをクリックします。 2. [データソース] [データソース]オプションのドロップダウンをクリックします。 3. [データソースの追加] [データソースの追加]をクリックします。 4. [データソース] [データソース]ダイアログボックスが表示されます。[データソース]オプションの横にあるドロップダウンから、 DataSource1、DataSource2 などを選択して必要な数のデータソースを追加します。後で、データソースの Name プロ パティからこれらのデータソースの名前を変更できます。 162 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport のデータソースの変更 新しいデータ連結レポートを作成する場合は、最初にデータソースを選択します。FlexReportDesigner アプリケーションを使 用すると、レポートやその要素の連結先になるすべてのデータソースを簡単に編集できます。 FlexReportDesigner を使用してレポートのデータソースを変更/編集する手順は、次のとおりです。 1. [データ] [データ]タブをクリックします。 2. [データソース] [データソース]ノードを展開します。 3. 編集するデータソースを右クリックし、[編集] [編集]を選択します。 または 1. [ホーム] [ホーム]をクリックします。 2. [データソース] [データソース]オプションのドロップダウンをクリックします。 3. データソースを選択し、[編集] [編集]をクリックします。 163 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 4. [データソース] [データソース]ダイアログボックスが表示されます。新しいデータソースを選択し、接続文字列を変更し、SQL 文を編集 したら、完了です。 FlexReportDesigner でデータのソート化 FlexReportDesigner を使用すると、レポート内のデータを簡単にソートできます。レポートのデータをソートする手順は、次の とおりです。 1. C1NWind.mdb を通してメインデータソースに連結された新しいレポート(Products Report)を作成します。次の図のよ 164 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms うなレポートになるように、テキストフィールドと計算フィールドとして Product Name、Quantity Per Unit、および Stock を選択します。 2. 3. 4. 5. 6. 165 Product Name に基づいてデータがソートされたレポートを表示するには、設計 設計モードに移行します。 [データ] [データ]タブをクリックします。 [データソース] [データソース]ノードを展開します。 レポートの連結先のメインデータソースを展開します。 [ソート定義] [ソート定義]を右クリックします。 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 7. [ソート定義の追加] [ソート定義の追加]を選択します。[ソート定義] [ソート定義]ダイアログボックスが表示されます。 8. [ProductName]]を選択し、[昇順] [昇順]チェックボックスをオンにして、[[OK]]をクリックします。 9. レポートをプレビュー表示します。 166 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport のプレビューと印刷 レポートを設計したら、レポートをプレビューしたり、印刷することができます。どちらのタスクも、いくつかのボタンをクリックす るだけで実行できます。 デザイナで新しいレポートを作成したり、既存のレポートを開くと、レポートは設計モードで表示されます。 レポートをプレビューするには、[プレビュー] をクリックするか、ショートカットキーの[F5]を押します。 レポートを印刷するには、[ファイル] [ファイル]メニューに移動し、[印刷] をクリックするか、ショートカットキーの[Ctrl]+ [P]を押します。[印刷]オプションは、[プレビュー] [プレビュー]モードでのみ有効です。[印刷]ダイアログボックスでは、プリンタの設定を 指定できます。 167 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms [ページレイアウト]グループにあるオプションを使用して、ページ設定を編集することもできます。 FlexReportDesigner でのレポートのインポート FlexReportDesigner アプリケーションの最も強力な機能の 1 つは、Microsoft Access(.mdb)や Crystal Reports(.rpt)で作 成したレポートをインポートできることです。 この機能を使用するには、コンピュータに Access がインストールされている必要があります。デザイナにレポートをインポート したら、Access は必要ありません。 168 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Access ファイルからレポートをインポートするには、[ファイル] [ファイル]メニューをクリックし、メニューから[インポート] [インポート]を選択します。イ ンポートするファイルの名前の入力を求めるダイアログボックスが表示されます。 Microsoft Access レポートのインポート Microsoft Access ファイルをインポートするには、Microsoft Access ファイル(MDB または ADP)を選択します。デザイナがファイルをスキャ ンし、インポートするレポートを選択するためのダイアログボックスが表示されます。 このダイアログボックスで、インポート処理を開始する前に、現在定義されているすべてのレポートを消去するかどうかも指定できます。 インポート処理は、ソースレポートのほとんどの要素を処理できます。ただし、次に挙げる要素は例外です。 イベントハンドラコード Access レポートは、VBA、マクロ、およびフォームを使用してレポートを動的に書式設定できます。C1FlexReport でも動的な書式設定 が可能ですが、C1FlexReport では VBScript だけが使用されるため、レポートのコードはすべて手作業で変換する必要があります。 フォーム指向のフィールドタイプ 169 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Access レポートには、デザイナのインポートプロシージャによって処理されないフィールドが含まれていることがあります。サポートされ ていない いないフィールドタイプは、Chart、CommandButton、ToggleButton、OptionButton、OptionGroup、ComboBox、ListBox、 TabCtl、および CustomControl です。 VBScript の予約語を使用するレポート Access は VBScript を使用しないため、レポートオブジェクトやデータセットフィールド名の識別子として VBScript の予約語を使用する ようなレポートが設計されている可能性があります。その場合は、VBScript エンジンが式を評価するときに問題が発生し、レポートが 正しくレンダリングされない原因になります。 識別子として使用できない予約語に は、Date、Day、Hour、Length、Minute、Month、Second、Time、TimeValue、Value、Weekday、Year などがあります。完全な リストについては、VBScript のリファレンスを参照してください。 上のような制限を受けるレポートは比較的少ないですが、レポートをインポートしたら、すべてのレポートをプレビューし、正しく動作するかどう かを確認してください。 C1NWind.mdb ファイルのインポート デザイナが実際に行う処理の例として、C1NWind.mdb ファイルをインポートしてみます。これには、次の 13 のレポートが含まれます。 (C1FlexReport に付属する NWind.xml ファイルには、以下で説明する変更がすべて行われています。) 1. Alphabetical List of Products(製品のアルファベット順リスト) (製品のアルファベット順リスト) 処理は不要です。 2. Catalog(カタログ) (カタログ) 処理は不要です。 3. Customer Labels(顧客ラベル) (顧客ラベル) 処理は不要です。 4. Employee Sales by Country(国別従業員売上高) (国別従業員売上高) このレポートには、手作業で変換する必要があるコードが含まれます。Group 1 のヘッダーの OnPrint プロパティには、次のコードを 割り当てます。 Visual Basic でコードを書く場合 Visual Basic If SalespersonTotal > 5000 Then ExceededGoalLabel.Visible = True SalespersonLine.Visible = True Else ExceededGoalLabel.Visible = False SalespersonLine.Visible = False End If C# でコードを書く場合 C# if (SalespersonTotal > 5000) { ExceededGoalLabel.Visible = true; SalespersonLine.Visible = true; } else { ExceededGoalLabel.Visible = false; SalespersonLine.Visible = false; } 5. Invoice(請求書) (請求書) 170 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 処理は不要です。 6. Products by Category(カテゴリ別製品) (カテゴリ別製品) 処理は不要です。 7. Sales by Category(カテゴリ別売上高) (カテゴリ別売上高) このレポートには、インポートされないグラフコントロールが含まれます。レポートにグラフを追加するには、グラフフィールドを使用しま す。 8. Sales by Category Subreport(カテゴリ別売上高サブレポート) (カテゴリ別売上高サブレポート) 処理は不要です。 9. Sales by Year(年度別売上高) (年度別売上高) このレポートには、手作業で変換する必要があるコードおよび Form オブジェクトへの参照が含まれます。[Data]パネルの Form オブ ジェクトを置き換えるには、ShowDetails パラメータを追加します。その DataType プロパティを Boolean に、Value プロパティを False に設定します。 レポートの OnOpen イベントで新しいパラメータを使用します。 Visual Basic でコードを書く場合 Visual Basic Dim script As String = _ "bDetails = [Show Details]" & vbCrLf & _ "Detail.Visible = bDetails" & vbCrLf & _ "[Group 0 Footer].Visible = bDetails" & vbCrLf & _ "DetailsLabel.Visible = bDetails" & vbCrLf & _ "LineNumberLabel2.Visible = bDetails" & vbCrLf & _ "Line15.Visible = bDetails" & vbCrLf & _ "SalesLabel2.Visible = bDetails" & vbCrLf & _ "OrdersShippedLabel2.Visible = bDetails" & vbCrLf & _ "ShippedDateLabel2.Visible = bDetails" & vbCrLf & _ "Line10.Visible = bDetails" C1FlexReport1.Sections.Detail.OnPrint = script C# でコードを書く場合 C# string script = "bDetails = [Show Details]" + "Detail.Visible = bDetails\r\n" + "[Group 0 Footer].Visible = bDetails\r\n" + "DetailsLabel.Visible = bDetails\r\n" + "LineNumberLabel2.Visible = bDetails\r\n" + "Line15.Visible = bDetails\r\n" + "SalesLabel2.Visible = bDetails\r\n" + "OrdersShippedLabel2.Visible = bDetails\r\n" + "ShippedDateLabel2.Visible = bDetails\r\n" + "Line10.Visible = bDetails"; c1FlexReport1.Sections.Detail.OnPrint = script; 最後に、2 行のコードを書き換える必要があります。 Visual Basic でコードを書く場合 Visual Basic Sections ("Detail").OnPrint = _ "PageHeader.Visible = True" Sections("Group 0 Footer).OnPrint = _ "PageHeader.Visible = False" C# でコードを書く場合 171 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms C# Sections ("Detail").OnPrint = "PageHeader.Visible = true"; Sections("Group 0 Footer).OnPrint = "PageHeader.Visible = false"; 10. Sales by Year Subreport(年度別売上高サブレポート) (年度別売上高サブレポート) 処理は不要です。 11. Sales Totals by Amount(金額別総売上高) (金額別総売上高) このレポートには、手作業で変換する必要があるコードが含まれます。ページヘッダーの OnPrint プロパティには、次のコードを割り当 てます。 Visual Basic でコードを書く場合 Visual Basic PageTotal = 0 C# でコードを書く場合 C# PageTotal = 0; 詳細の OnPrint プロパティには、次のコードを割り当てます。 Visual Basic でコードを書く場合 Visual Basic PageTotal = PageTotal + SaleAmount HiddenPageBreak.Visible = (Counter = 10) C# でコードを書く場合 C# PageTotal = PageTotal + SaleAmount; HiddenPageBreak.Visible = (Counter = 10); 12. Summary of Sales by Quarter(四半期別売上高のサマリー) (四半期別売上高のサマリー) 処理は不要です。 13. Summary of Sales by Year(年度別売上高のサマリー) (年度別売上高のサマリー) 処理は不要です。 以上をまとめると、NorthWind データベースからインポートされる 13 のレポートのうち、編集の必要がないレポートが 9 つ、コードを変換する 必要があるレポートが 3 つ、グラフフィールドを追加する必要があるレポートが 1 つです。 Crystal Reports のインポート Crystal Reports 定義ファイル(.rpt)からレポートをインポートするには 1. [ファイル] [ファイル]メニューをクリックして、[インポート] [インポート]を選択します。[レポート定義のインポート] [レポート定義のインポート]ダイアログボックスが表示さ れ、インポートするファイル名の入力を求められます。 2. Crystal Reports 定義ファイル(.rpt)を選択します。FlexReportDesigner アプリケーションが、レポートを FlexReport 形式に変換します。 3. レポートを保存します。これで、Crystal Report が FlexReport に変換されました。 内部または外部データソースに連結されたレポートは、元のデータソースパスに変更を行う必要なく、インポートして実行でき 172 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ます。 FlexReportDesigner アプリケーションは、Crystal Reports をインポートする際に、次の変換をサポートします。 セクション セクション/サブセクション サブセクション レポートヘッダー ページヘッダー グループヘッダー 詳細 グループフッター ページフッター レポートフッター フィールド テキストボックス グラフ ボックス 直線 ピクチャ チェックボックス サブレポート(手動によるパスの訂正が必要) 画像フィールド - BLOBField(ピクチャ)、OLEObject(ピクチャ) データベースフィールド クロスセクションボックスコントロール 特殊なフィールド 時刻書式 ページ番号 機能 テキストフィールドとデータベースフィールドを組み合わせた複雑な式("テキスト テキスト" + [式 式])、および集計 グループ化 パラメータ サマリーフィールド パーセンテージ集計 テキストボックス書式(通貨、日付など) KeepTogether(フィールド、セクション、サブセクション、グループ) 複数の結合クエリー ハイパーリンク テキストの回転 指定された順序でのグループ化 書式設定 テキストの書式設定 境界線 背景 次の画像は、FlexReportDesigner にインポートされた Crystal Report を示します。 173 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の画像は、CRReportDesigner にインポートされた Crystal Report を示します。 174 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms メモ メモ: レポートをインポートする前に、Crystal Reports のバージョンが 13.0.14.xxxx 以上であることを確認してください。 このバージョンの Crystal Reports は、システムにインストールされている Visual Studio と互換性があります。また、シ ステムに Crystal Reports 2013 バージョンがインストールされている場合に、Crystal Reports を C1FlexReport に変換 し、そのレポートを実行するには、xtreme.mdb へのデータベースパスを手動で変更する必要があります。 Crystal オブジェクトモデルで公開されていない要素や C1FlexReport でサポートされていない要素などの少数の例外を除く と、ソースレポートの大部分の要素がこのインポートプロセスによって処理されます。C1FlexReportDesigner アプリケーショ ンでまだサポートされていない変換は、次のとおりです。ただし、次回の 2016 リリースには組み込まれる予定です。 フィールド:テーブル、クロス集計、OLAPGrid、マップ、フラッシュ、数式の各フィールド スクリプト:プロパティスクリプト、複雑なスクリプト式、およびカスタム関数を抑制 機能:警告、パラメータ、複雑な式(テキストおよびパラメータフィールド)、階層的なグループ化 プロパティ:ドロップシャドウ レポートのエクスポートと公開 レポートを印刷するのではなく、ファイルにエクスポートして、クライアントや同僚に電子メールで配布する場合もあります。デザ イナは、次のエクスポート形式をサポートしています。 形式 説明 ページ化 HTML(*.html) レポート内のページごとに 1 つの HTML ファイルを作成します。HTML ページには、ユーザー がレポート内を移動するためのリンクが含まれます。 プレーン HTML(*.html) ドリルダウン機能を持たない 1 つの HTML ファイルを作成します。 非埋め込み(リンク)フォン Adobe の Acrobat ビューアまたはブラウザプラグインを備えたコンピュータ上で表示できる トを使用した PDF(*.pdf) PDF ファイルを作成します。 埋め込みフォントを使用し た PDF/A(*.pdf) 可搬性の高い埋め込みフォント情報を含む PDF ファイルを作成します。 RTF(*.rtf) 一般的なワードプロセッサ(Microsoft Word や WordPad)で開くことができる RTF ファイルを 作成します。これは、ページ付き XML ドキュメントまたは Open XML ドキュメントとして保存でき ます。 Microsoft Excel 97(*.xls) Microsoft Excel で開くことができる XLS ファイルを作成します。 Microsoft Excel 2007/2010 Open XML (*.xlsx) Microsoft Excel 2007 以降で開くことができる XLS ファイルを作成します。 Open XML Word(*.docx) Microsoft Word 2007 以降で開くことができる DOCX ファイルを作成します。 圧縮メタファイル(*.zip) EmfOnly、EmfPlusOnly、および EmfPlusDual 型の圧縮メタファイルを作成します。 TIFF(*.tiff)、BMP、PNG、 JPEG、GIF 画像 TIFF(Tag Image File Format)、BMP(Bitmap Images)、PNG(Portable Network Graphic)、 JPEG、または GIF 型の画像ファイルを作成します。 エクスポートファイルを作成するには、メニューから[ファイル] [ファイル]→[エクスポート] [エクスポート]を選択し、[レポートをファイルにエクスポー [レポートをファイルにエクスポー ト] ト]ダイアログボックスを使用して、エクスポート先、[ファイル名] [ファイル名]、および[保存の種類] [保存の種類]を指定します。 PDF/A へのエクスポート 175 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport は、PDF/A 標準に準拠する PDF 形式にエクスポートできます。 PDF/A は、請求書、パンフレット、マニュアル、研究報告書の作成、および PDF/A 形式でのレポートの保存によく使用されま す。また、JPEG2000 画像のエクスポート、電子署名の提供、および埋め込みフォントのサポートを可能にします。 FlexReportDesigner を使用して PDF/A 形式にエクスポートする手順は、次のとおりです。 1. C1FlexReportDeisgner アプリケーションを実行します。 2. レポートを開きます。 3. [ファイル] [ファイル]→[エクスポート] [エクスポート]をクリックするか、[プレビュー] [プレビュー]をクリックし、[エクスポート]グループで、[[PDF]]アイコンの ドロップダウンから[[PDF/A]]を選択します。[レポートをファイルにエクスポート] [レポートをファイルにエクスポート]ダイアログボックスが開きます。 4. ファイル名を指定します。[保存の種類]は、デフォルトでは PDF/A(*.pdf)です。 5. [保存] [保存]をクリックします。[[PDF として保存] として保存]ダイアログボックスが開きます。 6. ダイアログボックスに入力し、[[OK]]をクリックします。コンピュータにインストールされている PDF リーダーに、エクス ポートした PDF/A ドキュメントが表示されます。 これで、PDF/A 標準に準拠したレポートをエクスポートできました。 メモ:2015 v3 リリースでは、PDF/A-2B だけがサポートされます。 FlexReports の見栄えの向上 一般に、レポートでは、一部を他の部分より目立たせる必要があります。Background や Border などのビジュアルプロパ ティを使用して、地味なレポートを見栄えのよいレポートに変えることができます。このような機能については、以下のセクショ ンを参照してください。 背景 FlexReportDesigner を使用して背景色を設定することは、とても簡単です。FlexReport では、フィールド、セクション、および サブセクションの背景色を設定できます。背景色には、単色またはグラデーションを使用できます。 176 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 次の画像は、背景色が設定されていないレポートヘッダーを示します。 レポートヘッダーに背景色を設定するには 1. 設計モードで、レポートのヘッダー ヘッダーセクションを選択します。 2. プロパティ プロパティペインで、Background プロパティの横にあるドロップダウンをクリックします。カラーパレットが開きます。 3. 背景の色を選択します。タブ([Web]、[システム]、[カスタム]、および[グラデーション])から色を選択できます。 4. レポートをプレビュー表示します。 5. 背景にグラデーション(直線状または放射状)を設定することもできます。グラデーションを設定するには、設計モードに 切り替えます。 6. レポートのヘッダー ヘッダーセクションを選択します。 7. プロパティ プロパティペインで、Background プロパティの横にあるドロップダウンをクリックします。[グラデーション]タブに移動 し、以下に示すオプションを使用して設定を編集します。 177 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 8. 直線状のグラデーションを指定します。スライダをドラッグして、グラデーションの開始と終了を変更することもできま す。 9. レポートをプレビュー表示します。レポートヘッダーは、次のように表示されます。 境界線 FlexReportDesigner では、フィールド、セクション、およびサブセクションの境界線を簡単に設定できます。 フィールド/セクションを囲む境界線を設定するには 1. 周囲に境界線を表示するフィールド フィールドを選択します。 2. プロパティペインで、Borders プロパティの横にある省略符を選択します。[境界線プロパティ] [境界線プロパティ]ダイアログボックスが開きます。 178 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 3. 線の[スタイル] [スタイル]と[幅] [幅]を選択し、表示する境界線 境界線([左]、[上]、[右]、[下]のすべて、いずれか 1 つ、または組み合わせ)を 選択します。色を選択し、[[OK]]をクリックします。 4. レポートヘッダーに角丸境界線を挿入してみます。レポートヘッダー レポートヘッダーを選択します。 5. 上記と同様に、線スタイル、線の幅、境界線、および色を設定します。 6. 角の[半径 [半径 X]]と[半径 [半径 Y]]を設定します。 7. レポートをプレビュー表示します。 179 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 角丸を挿入する場合は、次の点に注意してください。 半径 X の範囲は、0 からフィールドの幅までです。 半径 Y の範囲は、0 からフィールドの高さまでです。 180 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms レポートおよびドキュメントビューア( レポートおよびドキュメントビューア(C1FlexViewer コントロール) C1FlexViewer コントロールは、C1Report、C1FlexReport、SSRS、C1Document などのさまざまなドキュメントタイプをプレ ビューするために使用できるプレビューコントロールです。対話式のユーザーフレンドリな UI を備えており、パラメータの表示/ リセット、レポートレンダリングのリフレッシュ、アウトラインにて階層の表示、ブックマークを使用したレポートの場所へのジャン プなどを行うことができます。詳細については、以下のトピックを参照してください。 FlexViewer の主要な機能 FlexViewer の主要な機能は次のとおりです。 使いやすい UI FlexViewer は、対話式で使いやすく完全な機能を備えたリボンベースの最新の UI を持ち、FlexReport、SSRS、PDF ド キュメントなどのドキュメントタイプをプレビューできます。リボンには、いくつかのグループに分かれたコマンドボタンが 含まれます。 パラメータの使用 パラメータの使用/リセット リセット FlexViewer では、パラメータを表示したり、リセットすることができます。レポートを表示するデータパラメータを入力で きます。String、Boolean、Date、Integer、Float 型のパラメータをサポートします。 レンダリングの更新と中止 FlexViewer では、[更新]ボタンと[停止]ボタンでレポートのレンダリングを更新およびキャンセルできます。 サムネイルと階層の表示 FlexViewer では、レポートページのサムネイルや階層のアウトラインを表示し、それらを使用して必要な場所にジャン プすることができます。 ページナビゲーション ページナビゲーションは、FlexViewer コントロールのナビゲーショングループで行うことができます。コマンドボタンを使 用して、レポートページ間を移動したり、ページ番号テキストボックスにページ番号を入力して特定のページ番号にジャ ンプすることができます。 縮小拡大が簡単 FlexViewer では、[ズーム]ボタンを使用して[ズーム]ダイアログボックスにアクセスできます。ダイアログボックスに は、以下のオプションがあります。 実際のサイズ - 実際のサイズでページを表示します。 ページ幅 - ページをプレビューウィンドウの幅に合わせます。 ページ全体 - プレビューウィンドウにページ全体を合わせます。 カスタム - ページのカスタムズーム % を設定します。 ズーム % - ページに設定されたズームパーセンテージを表示します。 デフォルトで広いレイアウト - 幅広のレポートにデフォルトで段組みレイアウトを適用するかどうかを示します。 見開きページ(表紙右) - レポートページを並べて表示します。 連続 - ページを連続で表示します。 ビューの回転 - ページの回転角度を選択できます。 ページ列数 - プレビューウィンドウに表示するページ列数を選択できます。 ページ行数 - プレビューウィンドウに表示するページ行数を選択できます。 印刷 FlexViewer コントロールでは、[印刷]ボタンを使用して、レポートを印刷することもできます。このボタンを押すと、標準 的な印刷設定を含む[印刷]ダイアログボックスが表示されます。 エクスポート FlexViewer では、DOCX、RTF、Open XML Word、Open XML Excel、HTML、PDF、GIF、JPEG、PNG、BMP、TIFF など の各種形式にレポートやドキュメントをエクスポートできます。 ツール FlexViewer には、それぞれウィンドウ内のスクロール、コピーするテキストの選択、選択テキストのコピーに使用できる ハンドツール、テキスト選択ツール、テキストコピーツールがあります。 FlexViewer ツールバー 181 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 以下の画像のように、コントロールの上部に FlexViewer ツールバーが表示されます。 ツールバーの上部は、以下のショートカットコマンドボタンで構成されます。 コマンドボタン コマンドボタン名 説明 戻る 前に開いたページに戻ることができます 進む 次のページに進むことができます コピーするテキストの選択 コピーするテキストを選択します FlexViewer ツールバーのすべてのコマンドボタンは、以下に示すグループに分かれます。 グループ グループ内のコマンドボタン 説明 印刷レイアウト、停止、更新、パ レポートページを印刷レイアウトで表示したり、 ラメータ、アウトライン、サムネイ ビューを更新したり、プレビューを停止します。 ル パラメータを表示したり、レポートページのアウト ラインやサムネイルを表示することもできます 182 ドキュメントの最初のページに移 動、ドキュメントの前のページに 移動、現在のページ番号、現在 のドキュメントのページ数、ド キュメントの次のページに移動、 ドキュメントの最後のページに移 動、戻る、進む、ページセット レポートの最初、最後、前、次のページに移動 できます。現在のページ番号が表示され、前後 に移動できます。[ページセット]ボタンを使用す ると、ページではなくページのセットに移動でき ます ズーム、実際のサイズ、ページ 幅、ページ全体 [ズーム]ボタンを使用して[ズーム]ダイアログ ボックスを開くことができます。[実際のサイズ] は、ページを通常サイズの 100% にズームしま す。[ページ幅]は、ウィンドウ幅に合わせてペー ジをズームします。[ページ全体]は、ウィンドウ に合わせてページをズームします 縦、横、ページ設定 レポートページの方向を縦長モードまたは横長 モードに変更できます。[ページ設定]では、現 在のレポートのページ設定を変更できます。 印刷、エクスポート、検索、ハン ドツール、テキスト選択ツール、 テキストのコピー レポートを印刷およびエクスポートできます。[検 索]ボタンを使用して、レポートのテキストを検索 できます。[ハンドツール]を使用して、マウスで ウィンドウでスクロールできます。[テキスト選択 ツール]を使用して、コピーするテキストを選択 できます。[テキストのコピー]ボタンを使用し て、選択テキストをコピーできます Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms レポートのビューを回転する FlexViewer では、要件に合わせて柔軟に、さまざまな角度にレポートビューを回転させることができます。レポートビューをさ まざまな角度に回転させるには、C1FlexViewer クラスの RotateView プロパティを設定します。RotateView プロパティは、 ビューの回転角度を記述する FlexViewerRotateView 列挙に含まれる次の値を受け取ります。 NoRotation: ビューに回転が適用されません。 Rotation180: ビューを 180 度回転します。 Rotation90Clockwise: ビューを時計回りに 90 度回転します。 Rotation90CounterClockwise: ビューを反時計回りに 90 度回転します。 設計時のレポートビューの回転 次の手順を実行して、設計時に FlexViewer でレポートビューを回転させることができます。 1. FlexViewer コントロールを右クリックし、プロパティを選択します。 2. プロパティ プロパティウィンドウで、表示されたリストから RotateView プロパティの値を選択して、さまざまな角度でレポートを回 転させます。 プログラムによるレポートビューの回転 レポートビューを回転させるには、最初にレポートを作成してロードし、次に FlexViewer コントロールでレポートをプレビュー する必要があります。その後、FlexViewerRotateView 列挙を使用してレポートビューを回転させます。次のコード は、FlexViewerRotateView 列挙の使用例を示します。 Visual Basic c1FlexViewer1.RotateView = FlexViewerRotateView.Rotation90Clockwise C# c1FlexViewer1.RotateView = FlexViewerRotateView.Rotation90Clockwise; 183 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms FlexReport と FlexViewer の連結 レポートをレンダリングするには、FlexViewer コントロールにレポートを連結する必要があります。レポート定義を作成し、 データソースを定義して C1FlexReport コンポーネントにロードしたら、レポートをプリンタやプレビューコントロール C1FlexViewer にレンダリングしたり、別のファイル形式にエクスポートすることができます。 C1FlexViewer コントロールでレポートをプレビューするには、次の手順に従います。 1. ツールボックスから、C1FlexViewer コントロールをダブルクリックしてプロジェクトに追加します。 2. プロパティウィンドウで、C1FlexViewer.Dock プロパティを Fill に設定します。 3. マウスで Windows フォームを選択し、ドラッグしてサイズ変更します。この例では、プレビューパネルが見やすくなるよ うに、フォームを 600x500 にサイズ変更しました。 4. フォームをダブルクリックし、Form_Load イベントハンドラに次のコードを入力します。 Visual Basic 'レポート定義をロードします C1FlexReport1.Load(@"..\..\Products Report.flxr", "Products Report") 'レポートをプレビュー表示します C1FlexViewer1.DocumentSource = C1FlexReport1 C# 'レポート定義をロードします c1FlexReport1.Load(@"..\..\Products Report.flxr", "Products Report"); 'レポートをプレビュー表示します c1FlexViewer1.DocumentSource = c1FlexReport1; 184 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms Flex Viewerでの でのPDFファイルの読み込み ファイルの読み込み C1 FlexViewerにC1PDFDocumentSource (ベータ版) (ベータ版)を結合することによってFlexViewerでPDFファイルを描画することがで きます。C1PDFDocumentSource を使用することで、PDFファイルを開いて、FlexViewerにロードするようになります。必要な ら、描画されたPDFファイルのエクスポートまたは印刷もできます。 デザイン時で デザイン時でPDFDocumentSourceコンポーネントを コンポーネントをFlexViewerコントロールと結合します コントロールと結合します FlexViewerでPDFファイルをレンダリングするには、次の手順に従います。 1. 新しい Windows フォームアプリケーションプを作成します。 2. C1PDFDocumentSourceをフォームにドラッグアンドドロップします。C1PDFDocumentSourceがコンポーネントトレ イに表示されます。 3. ツールボックスに移動し、C1FlexViewer コントロールをフォーム上にドラッグアンドドロップします。要件に応じ てC1FlexViewer の位置とサイズを調整することができます。 185 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 4. 「プロパティ」ウィンドウでは、DocumentSourceプロパティ値フィールドの横にあるドロップダウン矢印をクリックして、 c1PDFDocumentSource1を選択します。 5. C1PDFDocumentSourceコンポーネントを選択し、「プロパティ」ウィンドウ内でc1PDFDocumentSource1のプロパ ティに移動します。DocumentLocationプロパティを見つけ、PDFファイルのフルパスを入力します。 6. アプリケーションを実行します。PDFは、FlexViewerコントロールに描画します。 プログラムで プログラムでPDFファイルを ファイルをFlexViewerコントロールに読み込みます コントロールに読み込みます プログラムでFlex Viewerコントロール内にPDFファイルを描画するには、次の手順を実行します。 1. C1PDFDocumentSource および C1FlexViewer をフォームにドラッグアンドドロップします。 2. フォームをダブルクリックして、Form1_Load イベントに次のコードを記述します。 Visual Basic Dim pds As New C1PdfDocumentSource() pds.DocumentLocation = "../../Injury Form.pdf" C1FlexViewer1.DocumentSource = pds C# C1PdfDocumentSource pds = new C1PdfDocumentSource(); pds.DocumentLocation = @"..\..\Injury Form.pdf"; c1FlexViewer1.DocumentSource = pds; そのため、FlexViewer コントロールにロードされる PDF ファイルでは、以下の機能がサポートされます。 図形 3D(3 次元)および 2D(2 次元)シェイプを含む PDF を FlexViewer コントロールにロードできます。 テキスト検索 PDF ファイルでテキストを検索するには、次の手順を使用します。 1. FlexViewer コントロールに、テキストを含む PDF をロードします。 2. FlexViewer リボンから検索オプションを選択します。 3. ステータスバーに表示される検索テキストボックスに、検索するテキストを入力し、[Enter]キーを押します。 186 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms テキストの選択とテキストのコピー PDF ファイルでテキストを選択するには、次の手順を使用します。 1. FlexViewer コントロールに、テキストを含む PDF をロードします。 2. FlexViewer リボンからテキスト選択ツールを選択します。 3. PDF でテキストを選択します。 4. キーボードキー[Ctrl]+[C]または FlexViewer リボンの[テキストのコピー]オプションを使用して、テキストをコ ピーします。 187 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms SSRS レポートのプレビュー C1FlexViewer コントロールは、SSRS を表示する C1SsrsDocumentSource をサポートしています。SSRS サーバー上のレ ポートツリーを参照し、個々のレポートをプレビューできます。コントロールのリボンにある[パラメータ]をクリックして、レポート のパラメータを表示することもできます。 C1SsrsDocumentSource で、表示する SSRS レポートの場所や名前を指定できます。次に、C1FlexViewer コントロールを 使用して、SSRS レポートを表示できます。 メモ メモ:このトピックを開始するには、あらかじめ SSRS レポートサーバーへのアクセス権を確保し、そのサーバーに 1 つ以 上のレポートが存在する必要があります。 C1FlexViewer で SSRS レポートをプレビューまたはエクスポートするには、.NET Framework 4.0 以上を使用して新しい WinForms アプリケーションを作成し、次の手順を実行します。 1. 新しい Winforms アプリケーションプロジェクトを作成します。 2. ツールボックスから、C1SSRSDocumentSource コンポーネントをフォームに追加します。コンポーネントがコンポーネ ントトレイに表示されます。 ツールボックスでこのコンポーネントが見つからない場合は、右クリックし、[アイテムの選択] [アイテムの選択]を選択しま す。[ツールボックスアイテムの選択] [ツールボックスアイテムの選択]ダイアログボックスが表示されます。C1.Win.C1Document.dll でコン ポーネントを見つけ、ツールボックスに追加します。 3. フォームに C1FlexViewer コントロールを追加します。Dock プロパティを Fill に設定します。 4. C1FlexViewer をクリックし、DocumentSource プロパティを c1SSRSDocumentSource1 に設定します。これにより、 188 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms C1SSRSDocumentSource コンポーネントが C1FlexViewer の DocumentSource プロパティに割り当てられます。 5. C1SSRSDocumentSource を右クリックし、[プロパティ] [プロパティ]を選択してプロパティウィンドウを開きます。 6. DocumentLocation プロパティの横にあるドロップダウン矢印をクリックします。 7. 次のダイアログで、SSRS サーバーのアドレスとレポートの完全パスを指定し、[[OK]]をクリックします。 8. ConnectionOptions プロパティグループを展開します。 9. Credential プロパティの横にあるドロップダウン矢印をクリックします。 10. 次のダイアログで、ユーザー名、パスワード、およびドメインを指定し、[[OK]]をクリックします。 メモ メモ:次の DLL がプロジェクト参照に追加されていることを確認します。 C1.Win.C1Document.dll C1.Win.dll C1.Win.C1DX.dll C1.Win.ImportServices.dll C1.Win.FlexReport.dll C1.Win.FlexViewer.dll C1.Win.C1Ribbon.dll C1.Win.C1Input.dll C1.Win.C1InputPanel.dll 指定された SSRS レポートがプレビューコントロールに表示されるかどうかを決定するパラメータを設定するように求められる 場合があります。次の図は、FlexViewer コントロールに ComponentOne サーバー上の SSRS レポートを表示したところで す。 189 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms レポートは、サポートされたさまざまな外部形式にエクスポートできます。 190 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms タスク別ヘルプ タスクベースのヘルプは、ユーザーが .NET のプログラミングに精通しており、レポートの基本的な知識を身に付け、コントロー ルの一般的な使用方法を理解していることを前提としています。ヘルプに示される手順に従って作業を進めるだけで、 FlexReport のさまざまな機能を具体的に紹介するプロジェクトを作成しながら、C1FlexReport コンポーネントの主要な機能と 特長を理解できます。 プロジェクトでは次の名前空間を参照する必要があります。 C1.Win.C1FlexReport FlexReportCommonTasks.flxr このセクションのトピックの多くには、説明に使用する組み込みレポートが用意されています。組み込みレポートは、 FlexReportCommonTasks.flxr レポート定義ファイルにあります。WinForms Edition サンプルをインストールしてある場合、こ のファイルは、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォルダの Documents ま たは MyDocuments フォルダにあります。 交互表示の背景の追加 交互表示の背景色を使用してレポートを作成するには、詳細 詳細セクションの OnFormat プロパティを使用します。 交互表示の背景色を使用してレポートを作成するには、次の手順を実行します。 1. C1FlexReportDesigner を開きます。 2. 新しいレポートを作成するか、既存のレポートを開きます。C1FlexReportDesigner にレポートを開いたら、レポートの プロパティを変更することができます。 3. 設計 設計モードに切り替えてレポートの編集を開始します。 4. 設計モードで、プロパティペインの上にあるドロップダウンリストからレポートを選択します。 5. レポートの OnOpen プロパティを見つけ、cnt = 0 を入力します。これにより、cnt 変数が初期化されます。 6. プロパティペインの上にあるドロップダウンリスト、または設計領域から詳細 詳細セクションを選択します。 7. OnFormat プロパティを見つけ、その横の空のフィールドをクリックしてから、省略符 省略符ボタンをクリックします。VBScript エディタ エディタが表示されます。次の VBScript 式をエディタで入力し、[完了] [完了]をクリックします。 cnt = cnt + 1 if cnt mod 2 = 0 then Detail.Background.StartColor = Rgb(238, 214, 200) Detail.Background.EndColor = Rgb(238, 200, 177) else Detail.Background.StartColor = vbWhite Detail.Background.EndColor = vbWhite endif 8. [プレビュー] [プレビュー]ボタンをクリックして、交互表示の背景を持つレポートをプレビュー表示します。 191 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms メモ: レポートの完全なサンプルについては、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォルダにある FlexCommonTasks.flxr レポート定 義ファイルの「Alternating Background」レポートを参照してください。使用するデータベース C1NWind.mdb も、ComponentOne Samples フォルダにあります。 条件付き書式設定の追加 表示するデータに応じてフィールドの外観を変更する必要がある場合があります。それにはパラメータを使用します。たとえば、条件 に応じて一部のデータフィールドを強調表示する場合は、条件を定義するパラメータと条件に応じてデータフィールドを強調表示する ためのパラメータの 2 つのパラメータを定義します。 条件付き書式設定を使用してレポートを作成するには、次の手順を実行します。 1. C1FlexReportDesigner を開きます。 2. 新しいレポートを作成するか、既存のレポートを開きます。C1FlexReportDesigner にレポートを開いたら、レポートのプロパ ティを変更することができます。 3. 設計 設計モードに切り替えてレポートの編集を開始します。 4. pCondition と pHighlightColor の 2 つのパラメータを追加します。 5. DataType を、pCondition は整数、pHighlightColor は文字列に設定します。 6. AllowedValuesDefinition プロパティで、各パラメータのプロパティを次のように指定します。 値 192 pCondition pHighlightColor ラベル - Unit price greater than 50、値 - CInt(1) ラベル - Red、値 - Red ラベル - Unit price greater than 100、値 - CInt(2) ラベル - Green、値 - Green Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 7. 設計モードで、プロパティペインの上にあるドロップダウンリストから[詳細] [詳細]を選択します(このセクションに、条件付き書式設定 を追加するフィールドが含まれるため)。 8. OnFormat プロパティを見つけ、そのプロパティの横にある省略符 省略符ボタンをクリックします。 9. VBScript エディタ エディタが表示されます。コードエディタで次の式を入力します。 row = row + 1 if row mod 2 = 1 Then rowColor = Rgb(238, 214, 200) Else rowColor = "Transparent" EndIf doHighlight = False if pCondition = 1 Then doHighlight = UnitPrice > 50 ElseIf pCondition = 2 Then doHighlight = UnitPrice > 100 ElseIf pCondition = 3 Then doHighlight = UnitsInStock > 50 EndIf if doHighlight Then textColor = pHighlightColor Else textColor = Rgb(90, 70, 50) EndIf Detail.BackColor = rowColor for i = 0 to Detail.Fields.Count - 1 Detail.Fields(i).BackColor = rowColor Detail.Fields(i).ForeColor = textColor Next 10. レポートをプレビュー表示します。 メモ: レポートの完全なサンプルについては、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォルダにある FlexCommonTasks.flxr レポート定義ファイ 193 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms ルの「Conditional Formatting」レポートを参照してください。使用するデータベース C1NWind.mdb も、ComponentOne Samples フォルダにあります。 カスタム用紙サイズの指定 デフォルトでは、C1FlexReport は、デフォルトの用紙サイズとデフォルトのプリンタを使用してレポートを作成します。 用紙のサイズと方向は、PaperSize プロパティと Orientation プロパティを使用して指定できます。ただし、選択した用紙サイ ズを現在のプリンタで使用できるかどうかがレンダリング前にチェックされ、選択した設定が無効な場合は、デフォルトの用紙 サイズに変更されます。 使用可能なプリンタに関係なく、特定の用紙サイズを指定して使用する場合は、PaperSize プロパティを Custom に設定 し、Layout.CustomWidth プロパティと Layout.CustomHeight プロパティにページのサイズ(ツイップ単位)を設定します。 FlexReportDesigner を使用してレポートに 8.5" x 25" のカスタム用紙サイズを指定するには 1. C1FlexReportDesigner を開きます。 2. 新しいレポートを作成するか、既存のレポートを開きます。C1FlexReportDesigner にレポートを開いたら、レポートの プロパティを変更することができます。 3. 設計モードで、プロパティペインの上にあるドロップダウンリストからレポートを選択します。 4. Layout を見つけ、プロパティノードを展開して、すべての使用可能なプロパティを表示します。 5. 次のプロパティを設定します。 CustomHeight=36000 CustomWidth=12472 PaperSize=Custom このように指定すると、インストールされているプリンタや実際に使用できる用紙サイズに関係なく、独自の用紙サイズを使用 できます。 メモ: レポートの完全なサンプルについては、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォルダにある FlexCommonTasks.flxr レポート定 義ファイルの「Custom Paper Size」レポートを参照してください。使用するデータベース C1NWind.mdb も、ComponentOne Samples フォルダにあります。 動的ページヘッダーの追加 状況に応じてレポートのページごとに異なるページヘッダーを表示する動的ページヘッダーを生成したい場合があります。そ れには、PageHeader の OnFormat プロパティを使用します。 たとえば、レポートの偶数ページと奇数ページに異なるレポートヘッダーを表示したいとします。動的ページヘッダーを使用し てレポートを作成するには、次の手順を実行します。 1. 2. 3. 4. C1FlexReportDesigner を開きます。 新しいレポートを作成するか、既存のレポートを開きます。 設計 設計モードに切り替えてレポートの編集を開始します。 PageHeader セクションに2つのサブセクション、OddPageHeader と EvenPageHeader を追加します。 OddPageHeader セクションは奇数ページに表示され、EvenPageHeader セクションは偶数ページに表示されます。 5. 上記の各サブセクションに、テキストフィールドやパラグラフフィールドを追加し、奇数および偶数ページにヘッダーを表 示するための式を含めます。 6. PageHeader の OnFormat プロパティに移動し、プロパティの横にある省略符をクリックします。 194 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 7. VBScript エディタが表示されます。エディタで次の VBScript 式を入力します。 odd = (page mod 2 <> 0) PageHeader.SubSections(0).Visible = odd PageHeader.SubSections(1).Visible = not odd 8. レポートの最初のページにページヘッダーを表示しないようにするには、レポートの Layout.PageHeader プロパティ を NotWithReportHdr に設定します。 9. レポートをプレビュー表示します。 メモ メモ: レポートの完全なサンプルについては、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォルダにある FlexCommonTasks.flxr レポート定 義ファイルの「Dynamic Page Header」レポートを参照してください。使用するデータベース C1NWind.mdb も、ComponentOne Samples フォルダにあります。 ガターマージンの作成 ガターマージンは、マージンに追加される特別なスペースです(綴じ代など)。ガターマージンがあると、ページをバインダーや 冊子などにまとめやすくなります。 レポートにガターマージンを追加するには、奇数ページの左マージンを大きくします。それには、奇数ページでは Layout.MarginLeft の値を大きくし、偶数ページではデフォルト値を使用します。 レポートにガターマージンを作成するには、次の手順を実行します。 195 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms 1. C1FlexReportDesigner を開きます。 2. 新しいレポートを作成するか、既存のレポートを開きます。 3. 設計モードで、プロパティウィンドウのドロップダウンリストから[詳細]を選択します。これで、セクションで使用できるプ ロパティが表示されます。 4. レポートの OnOpen プロパティに移動し、省略符ボタンをクリックします。VBScript エディタが表示されます。エディタで 次の VBScript 式を入力します。 cnt = 0 gutter = report.layout.marginleft marginRight = report.layout.marginRight 5. レポートの OnOpen プロパティに移動し、省略符ボタンをクリックします。VBScript エディタが表示されます。エディタ で次の VBScript 式を入力します。 if page mod 2 = 1 then Report.layout.marginleft = gutter Report.Layout.marginright = marginRight else Report.layout.marginleft = gutter - 1440 Report.Layout.marginright = marginRight + 1440 EndIf 6. レポートをプレビュー表示します。 メモ メモ: レポートの完全なサンプルについては、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォルダにある FlexCommonTasks.flxr レ ポート定義ファイルの「Gutter」レポートを参照してください。使用するデータベース C1NWind.mdb も、ComponentOne Samples フォルダにあります。 グループ化とソート 196 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms グループ化では、グループ式を使用してレコードをグループに分けることができます。この機能は、デフォルトで使用されます。ま た、Group.SortExpression プロパティを使用して集計関数を指定することで、データをグループ化する方法を変更することもできます。 ソートを使用すると、データを昇順または降順に整理できます。Group.SortExpression が指定されている場合は、Group.Sort プロパティを使用し てソートを実行できます。 ここでは、パラメータを使用して、ユーザーの入力に応じてデータがグループ化およびソートされるレポートを作成します。 1. 新しいレポートを作成します。次の SQL 文を指定して、メインデータソースとなるデータソースにレポートを連結します。 SELECT Employees.EmployeeID as EmployeeID, Employees.FirstName as FirstName, Employees.LastName as LastName, Orders.OrderID as OrderID, Orders.OrderDate as OrderDate, Orders.ShippedDate as ShippedDate, Products.ProductName as ProductName, od.UnitPrice as UnitPrice, od.Quantity as Quantity FROM (([Order Details] od INNER JOIN Orders ON od.OrderID = Orders.OrderID) INNER JOIN Products ON od.ProductID = Products.ProductID) INNER JOIN Employees ON Orders.EmployeeID = Empl 2. 2つのパラメータを追加します。 pEmployeeSortExpression:従業員名または売上高に基づくグループ化を指定します。 pEmployeeSortOrder:ソート順を昇順または降順に指定します。 3. ラジオボタンから値を選択して AllowedValuesDefinition を設定し、2つのパラメータのプロパティを次のように設定します。 pEmployeeSortExpression Label アルファベット順 売上 Value FullName Sum(Order) pEmployeeSortOrder Label NoSort 昇順 降順 Value NoSort Ascending Descending 4. レポートの GlobalScripts プロパティに移動し、VBScript エディタで次の式を記述します。 EmployeeGroup.SortExpression = pEmployeeSortExpression.Value EmployeeGroup.Sort = pEmployeeSortOrder.Value 5. レポートの OnOpen プロパティに移動し、VBScript エディタで次の式を記述します。 If pEmployeeSortOrder = "NoSort" Then fldSortDesc = "No Sorting" Else fldSortDesc = pEmployeeSortExpression.DisplayText & " (" & pEmployeeSortOrder.DisplayText & ")" EndIf 6. レポートをプレビュー表示します。 197 Copyright © GrapeCity inc. All rights reserved. FlexReport for WinForms メモ メモ: レポートの完全なサンプルについては、ComponentOne Samples\Winforms\C1FlexReport\CS\FlexCommonTasks フォ ルダにある FlexCommonTasks.flxr レポート定義ファイルの「Groups and Sorting」レポートを参照してください。使用するデータ ベース C1NWind.mdb も、ComponentOne Samples フォルダにあります。 198 Copyright © GrapeCity inc. All rights reserved.