FlexReport for WinForms
手順 1:レポート定義の作成
FlexReport クイックスタート > 手順 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.ConnectionStringDataSource.RecordSource を選択します。

    DataSource.ConnectionString は、次の 3 つの方法で指定できます。

    • 文字列をエディタに直接入力します。
    • ドロップダウンリストを使用して、最近使用した接続文字列を選択します(デザイナには、最近使用された接続文字列が 8 個まで保持されます)。
    • 省略符(...)ボタンをクリックして、標準の接続文字列ビルダを起動します。

    DataSource.RecordSource の文字列は、次の 2 つの方法で指定できます。

    • [テーブル]オプションをクリックし、リストからテーブルを選択します。
    • [SQL]オプションをクリックし、エディタに SQL 文を入力(または貼り付け)します。

    手順 1 の実行

    次の手順を実行します。

    1. 省略符ボタンをクリックして、標準の接続文字列ビルダを起動します。[データリンクプロパティ]ダイアログボックスが開きます。
    2. [プロバイダ]タブを選択し、リストからデータプロバイダを選択します。この例では、Microsoft Jet 4.0 OLE DB Provider を選択します。
    3. [次へ]ボタンをクリックするか、[接続]タブを選択します。ここで、データソースを選択する必要があります。
    4. 省略符ボタンをクリックしてデータベースを選択します。[Access データベースの選択]ダイアログボックスが表示されます。この例では、(デフォルトでは Documents フォルダにインストールされる)ComponentOne Samples ディレクトリの Common フォルダにある C1NWind.mdb を選択します。このディレクトリはデフォルトのインストールパスに基づいていますが、インストールパスを変更した場合は、パスが異なる場合があります。
    5. [開く]をクリックします。接続をテストし、[OK]をクリックします。
    6. [OK]をクリックして、[データリンクプロパティ]ダイアログボックスを閉じます。
    7. データソースを選択したら、テーブル、ビュー、またはストアドプロシージャを選択して実際のデータを提供できます。DataSource.RecordSource の文字列は、次の 2 つの方法で指定できます。
      • [データソース]タブを選択し、[テーブル]リストから Products テーブルを選択します。
      • [SQL]タブを選択し、エディタに SQL 文を入力(または貼り付け)します。

        次に例を示します。

        select * from products

        FlexReport Wizard

    8. [次へ]をクリックします。ウィザードに従って残りの手順を実行します。
  2. レポートに含めるフィールドを選択します。

    このページには、手順 1 で選択したレコードセットにあるフィールドのリスト、およびレポートのグループフィールドと詳細フィールドを定義する 2 つのリストが表示されます。グループフィールドはデータのソート方法と集計方法を定義し、詳細フィールドはレポートに表示する情報を定義します。

    マウスポインタを使用してドラッグすることで、リスト間でフィールドを移動することができます。フィールドを[詳細]リストにドラッグしてレポートに入れたり、リスト内でフィールドをドラッグして順序を変更することができます。レポートからフィールドを削除する場合は、フィールドをドラッグして[利用可能なフィールド]リストに戻します。

    手順 2 の実行

    次の手順を実行します。

    1. マウスポインタを使用して CategoryID フィールドを選択し、[グループ]リストにドラッグします。
    2. [>>]ボタンをクリックして、残りのフィールドを[詳細]リストに移動します。

    3. [次へ]をクリックします。ウィザードに従って残りの手順を実行します。
  3. 新しいレポートのレイアウトを選択します。

    このページには、ページ内でのデータの構成方法を定義するいくつかのオプションが用意されています。レイアウトを選択すると、左側にサムネイルプレビューが表示され、ページ内でレイアウトがどのように表示されるかを確認できます。2 つのレイアウトグループがあります。1 つは、グループなしのレポート用のレイアウトグループ、もう 1 つはグループありのレポート用のレイアウトとグループです。目的とするレポートの最終的な外観に最も近いレイアウトを選択してください。

    また、このページでは、用紙の方向と、フィールドをページ幅に合わせて調整するかどうかを選択できます。

    [ラベル]レイアウトオプションを使用して、Avery スタイルのラベルを印刷します。このオプションを選択すると、印刷するラベルの種類を指定するためのページが表示されます。

    手順 3 の実行

    次の手順を実行します。

    1. [アウトライン]レイアウトのままにします。

      Selecting Layout in FlexReport Wizard

    2. [次へ]をクリックします。ウィザードに従って残りの手順を実行します。
  4. 新しいレポートのスタイルを選択します。

    このページでは、新しいレポートで使用するフォントと色を選択できます。前のページと同様に、プレビューが表示され、各スタイルがどのように表示されるかを確認できます。最適なスタイルを選択します(スタイルは後で変更したり、詳細に調整することができます)。

    手順 4 の実行

    1. Verdana スタイルを選択します。

      Selecting Style in FlexReport Wizard

    2. [次へ]をクリックします。ウィザードに従って残りの手順を実行します。

  5. 新しいレポートのタイトルを選択します。

    この最後の手順のページでは、新しいページのタイトルを選択します。また、新しいレポートをすぐにプレビューするか、プレビューする前に編集モードに移動してデザインに手を加えるかを指定します。

    手順 5 の実行

    1. 新しいレポートのタイトルを入力します。たとえば、「Products Report」とします。

      Enter Title in FlexReport Wizard

    2. [レポートのプレビュー]を選択し、[完了]をクリックします。

      デザイナのプレビューペインにレポートが直ちに表示されます。

レポートに何らかの調整が必要なことに気づくことがあります。レポートの修正方法については、次の手順で説明します。

コードを使用したレポート定義の作成

以下の手順では、FlexReportDesigner アプリケーションまたはコードを使用してレポート定義を作成する方法について説明します。独自のレポートデザイナを記述したり、アドホックなレポートジェネレータを作成することもできます。

この例では、コードを使用して、C1NWind データベースに基づく単純な表形式のレポート定義を作成します。コードにはコメントが付けられ、C1FlexReport オブジェクトモデルの最も重要な要素が例示されています。次の手順を実行します。

  1. 最初に、ボタンコントロール、C1FlexReport コンポーネント、および C1FlexViewer コントロールをフォームに追加します。次のプロパティを設定します。

    Button.Name = btnEmployees

    C1FlexReport.Name = c1FlexReport1 (C# でのデフォルト名)

    C1FlexViewer.Name = c1FlexViewer1 (C# でのデフォルト名)

  2. c1FlexReport1 という名前のコントロールを初期化します。それには、Clear メソッドを使用してコンテンツを消去し、コントロールのフォントを設定します(このフォントが新しいフィールドに割り当てられます)。  
    Private Sub RenderEmployees()
           C1FlexReport1.DataSource.RecordSourceType = RecordSourceType.Auto
            ' 既存のフィールドをすべて消去します   
            C1FlexReport1.Clear()
            ' すべてのコントロールのデフォルトのフォントを設定します   
            C1FlexReport1.Font.Name = "Tahoma"
            C1FlexReport1.Font.Size = 8
    End Sub
    
     private void RenderEmployees()
             {
                 c1FlexReport1.DataSource.RecordSourceType = RecordSourceType.Auto;
                 // 既存のフィールドをすべて消去します  
                 c1FlexReport1.Clear();
                 // すべてのコントロールのデフォルトのフォントを設定します
                 c1FlexReport1.Font.Name = "Tahoma";
                 c1FlexReport1.Font.Size = 8;
    }
    
  3. 次に、C1NWind.mdb データベースから必要なデータを取得するように DataSource オブジェクトを設定します。それには、ConnectionString プロパティと RecordSource プロパティを使用します。

     ' 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"
    
        //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 インチを引いた値)に設定します。

    'Layout を初期化します    
     Dim l As Layout = C1FlexReport1.Layout
     l.Orientation = OrientationEnum.Portrait
     l.Width = 6.5 * 1440 ' 8.5 からマージンを引いた値(ツイップ単位)
    
     //Layout を初期化します
     Layout l = c1FlexReport1.Layout;
     l.Orientation = OrientationEnum.Portrait;
     l.Width = 6.5 * 1440; // 8.5 からマージンを引いた値(ツイップ単位)
    
  5. 次の手順は、興味深いものです。すべてのレポートには、5 つの基本セクション(詳細レポートヘッダーレポートフッターページヘッダーページフッター)があります。次のコードを使用して、レポートヘッダーを設定します。ここでは、いくつかのプロパティを設定し、タイトルフィールドを追加します。

    ' レポートヘッダーを作成します   
            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)
    
     // レポートヘッダーを作成します          
            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 に設定することで、同じことを実現できます。ページフッターを作成するには、次のコードを追加します。

    ' ページフッターを作成します   
            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()
            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)
    
    // ページフッターを作成します    
         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 で定義されている変数を使用しています。PagePages は、現在のページ番号と総ページ数が格納される変数です。このセクションでは、直線として表示されるように設定されたフィールドも使用されています。

  7. 次に、ページヘッダーセクションを設定します。このセクションは、各ページの上部にレンダリングされ、フィールドラベルが表示されます。ページヘッダーセクションを使用してフィールドラベルを表示するテクニックは、表形式のレポートでよく使用されます。コードは単純ですが、すべてのフィールドのサイズを指定しているため、見た目は多少煩雑です。実際のアプリケーションでは、これらの値はプログラムに組み込まれません。フィールドラベルを含むページヘッダーを作成するには、次のコードを追加します。

      'フィールドラベルを含むページヘッダーを作成します   
            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
            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)
    
     //フィールドラベルを含むページヘッダーを作成します   
      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";
      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. 詳細セクションを追加して、レポートを完成させます。このセクションが、実際のデータを表示するセクションです。詳細セクションでは、ページヘッダーセクションの各ラベルの下のテキストフィールドに式を設定します。詳細セクションを作成するには、次のコードを追加します。

    ' 詳細セクションを作成します   
            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
            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)
    
    // 詳細セクションを作成します   
                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();
                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 イベントにイベントハンドラを追加します。コードエディタが表示され、イベントハンドラ内に挿入ポイントが配置されます。次のコードを入力します。

     RenderEmployees()       
     C1FlexViewer1.DocumentSource = C1FlexReport1
    
     RenderEmployees();
     c1FlexViewer1.DocumentSource = c1FlexReport1;
    

    基本レポートの外観は次のようになります。

    Create Report Definition in FlexReport