ActiveReports for .NET 18.0J
リッチテキストとフィールドのマージ
ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > セクションレポートのチュートリアル > レイアウト > リッチテキストとフィールドのマージ

ActiveReportsでは、RichTextBoxコントロールを使用して、差し込み形式のレポートを作成することができます。RichTextBoxコントロールに、値の置き換え用の固定フィールド(マージフィールド)を設定すると、実行時に実際の値に置き換えることができます。このチュートリアルでは、RichTextBoxコントロールを使用したメールマージレポートの作成方法を紹介します。

このトピックでは、以下のタスクを行います。

メモ: このチュートリアル、Northwindデータベース(Nwind.mdb)のファイルを使用しています。使用にはNorthwindデータベース(..ActiveReportsNET18\Samples\Data\Nwind.mdb)へのアクセス権限が必要です。

チュートリアルを完了すると、次のレポートが作成されます。

デザイン時のレイアウト

実行時のレイアウト

Visual StudioプロジェクトにActiveReportを追加する

  1. Visual Studioで新規プロジェクトを開きます。
  2. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  3. [新しい項目を追加]ダイアログから[ActiveReports 18.0 セクションレポート(コード)]を選択し、名前を「rptLetter」に変更します。
  4. [追加]ボタンをクリックします。

詳細については、「クイックスタート」を参照してください。

レポートをデータソースに接続する

  1. Detailセクションバンドのデータソースアイコンをクリックします。
  2. [レポートデータソース]ダイアログで、[OLE DB]タブの接続文字列の横にある[作成]ボタンをクリックします。
  3. [データリンクプロパティ]ウィンドウで、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックし、[接続]タブへ移動します。
  4. <...>をクリックして、Nwind.mdbへのアクセスパスを参照します。アクセスパスの選択が完了したら、開く]をクリックします。
  5. [接続のテスト]ボタンをクリックし、データベースへの接続を確認します 。 
  6. [OK]をクリックし、[データリンクプロパティ]ウィンドウに戻ります。接続文字列が自動的に追加されていることを確認します。
  7. [OLE DB]タブの[クエリ]フィールドに、以下のSQLクエリを記入します。
    SQLクエリ
    コードのコピー
    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
  8. [OK] をクリックし、レポートのデザイナ面に戻ります。

レポートのレイアウトを作成する

  1. レポートのデザイナ面を右クリックし、[挿入]を選択し、[グループヘッダ/フッタ]を選択して、グループヘッダ、グループフッタを追加します。
  2. レポートのデザイナ面のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
  3. レポートのデザイナ面から、GroupHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    DataField CustomerID
    Height 2.5
    KeepTogether True
  4. レポートのデザイナ面から、GroupFooterセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Height 1.1
    KeepTogether True
    NewPage After
  5. レポートのデザイナ面から、Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定します。
  6. レポートのデザイナ面から、PageHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Height 0.8
    BackColor Coral
  7. ツールボックスから、PageHeaderセクションに「Label」コントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    Label

    プロパティ名 プロパティの値
    Location 0, 0 in
    Size 6.5, 0.65 in
    Text GraepeCity
    Font Size 36
    Font Bold True
  8. レポートエクスプローラ]から、[フィールド]ノードを展開し、[バウンドフィールド]ノードを展開します。GroupHeaderセクションに[SubTotal]フィールドをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Location 4, 0 in
    Size 1, 0.2 in
    Name txtSubtotal1
    OutputFormat Currency
    Visible False
    SummaryType SubTotal
    SummaryGroup GroupHeader1
    メモ: txtSubtotal1は非表示であるが、[RichTextBox]コントロールの中で表示する値と書式を提供するために必要です。
  9. ツールボックスから、GroupHeaderセクションに以下のコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    RichTextBox

    プロパティ名 プロパティの値
    Location 0, 0 in
    Size 6.5, 2.1 in
    AutoReplaceFields True

    Label1

    プロパティ名 プロパティの値
    Location 0.875, 2.25 in
    Size 1, 0.2 in
    Text 注文番号
    Font Bold True

    Label2

    プロパティ名 プロパティの値
    Location 1.875, 2.25 in
    Size 1, 0.2 in
    Text 注文日付
    Font Bold True

    Label3

    プロパティ名 プロパティの値
    Location 4.375, 2.25 in
    Size 1, 0.2 in
    Text 金額
    Font Bold True
    Alignment Right
  10. レポートエクスプローラ]から[フィールド]ノードを展開し、[バウンドフィールド]ノードを展開します。Detailセクションに以下のフィールドをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    TextBox1 (OrderID)

    プロパティ名 プロパティの値
    Location 0.875, 0 in
    Size 1, 0.2 in

    TextBox2 (OrderDate)

    プロパティ名 プロパティの値
    Location 1.875, 0 in
    Size 1, 0.2 in
    OutputFormat MM/dd/yy

    TextBox3 (Subtotal)

    プロパティ名 プロパティの値
    Location 4.375, 0 in
    Size 1, 0.2 in
    OutputFormat Currency
    Alignment Right
  11. ツールボックスから、GroupFooterセクションにLabelコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    Label

    プロパティ名 プロパティの値
    Location 5.15, 0.8 in
    Size 1.35, 0.2 in
    Text 以上
  12. ツールボックスから、PageFooterセクションにLabelコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    Label

    プロパティ名 プロパティの値
    Location 0, 0 in
    Size 6.5, 0.2 in
    Text GrapeCity, 401 Parkplace, Suite 411, Kirkland, WA 98033
    Alignment Center

RichTextコントロールにフィールドとテキストを追加する

  1. [RichTextBox]コントロールをダブルクリックし、デフォルトのテキストを削除します。
  2. [RichTextBox]コントロールをダブルクリックし、右クリックから[フィールドの追加]を選択します。
  3. [フィールドの追加]ダイアログから[Date]を入力し、[OK]をクリックします。
  4. [RichTextBox]コントロールに表示された[!Date]テキストの前に、行の右端までスペースを追加します(次の行に重ならないように)。
  5. テキストの端にカーソルを移動し、[Enter]キーを押して次の行に移動します。
  6. [フィールドの追加]ダイアログを使用し、各フィールドを挿入します(各フィールドの配置は、前述のデザイン時のレイアウトの画像を参照してください)。
    • CompanyName
    • ContactName
    • Address
    • City
    • Region
    • Country
    • SubTotal
    • ContactName
  7. すべてのフィールドを追加した後に、[RichTextBox]コントロールに以下のテキストを追加します。
    RichTextコントロールに貼り付けます
    コードのコピー
    [!ContactName] 様        
    
    お世話になっております。貴方の昨年の受注合計は一覧のように[!SubTotal]となっております。どうぞご確認ください。ご不明な点は1-800-DNT-CALLまでご連絡いただきますようお願い申し上げます。
    
  8. テキストエディタで行うような要領で、コントロール内のテキストとフィールドを配置します。

FetchDataイベントを使用して、データソースから情報を取得する

Visual Basic

  1. レポートのコードビューを表示し、上部左側のドロップダウンキーをクリックし、rptLetterイベントを選択します。
  2. レポートのコードビューの、上部右側のドロップダウンキーをクリックし、FetchDataを選択し、FetchDataイベントのイベント処理メソッドを作成します。
  3. 顧客の住所に地域情報がある場合に、カンマとスペースを追加するために、ハンドラにコードを追加します。
    Visual Basicコード (FetchDataイベントの上に貼り付けます)
    コードのコピー
    Dim region As String
    
    Visual Basicコード (FetchDataイベント内に貼り付けます)
    コードのコピー
    '地域がない場合は、何も表示しない
    If Fields("Region").Value Is System.DBNull.Value Then
        region = ""
    Else
    '地域がある場合、カンマとスペースを追加する
        region = ", " + Fields("Region").Value
    End If
    

C#

  1. レポートのデザイナ面から、レポートの下のグレーの領域をクリックします。
  2. [プロパティ]ウィンドウのイベントアイコンをクリックし、レポートのイベント一覧を表示します。
  3. FetchDataをダブルクリックし、FetchDataイベントのイベント処理メソッドを作成します。
  4. 顧客の住所に地域情報がある場合に、カンマとスペースを追加するために、ハンドラにコードを追加します。
    C#コード (FetchDataイベントの上に貼り付けます)
    コードのコピー
    string region;
    
    C#コード (FetchDataイベント内に貼り付けます)
    コードのコピー
    if(Fields["Region"].Value is System.DBNull)
      region = "";
    else
      region = ", " + Fields["Region"].Value.ToString();
    

RichTextBoxコントロールで、各レコードのフィールド値を更新するコードを追加する

  1. レポートのデザイナ面から、GroupHeaderセクションをダブルクリックし、GroupHeaderのFormatイベントのイベント処理メソッドを作成します。
  2. 以下のタスクを行うために、ハンドラにコードを追加します。
    • RichTextコントロール内のDateフィールドを現在のパソコン日付に変更する
    • RichTextコントロール内のRegionフィールドをFetchDataイベントで作成した値に変更する

    Visual Basic

    Visual Basicコード ( GroupHeader Formatイベント内に貼り付けます) event.
    コードのコピー
    '今日の日付に変更する
    Me.RichTextBox1.ReplaceField("Date", System.DateTime.Today.Date.ToShortDateString())
    'FetchDataイベントの返却値を使用する
    Me.RichTextBox1.ReplaceField("Region", region)
    

    C#

    C#コード (GroupHeader Formatイベント内に貼り付けます)
    コードのコピー
    // 今日の日付に変更する
    this.richTextBox1.ReplaceField("Date", System.DateTime.Today.Date.ToShortDateString());
    //FetchDataイベント返却値を使用する
    this.richTextBox1.ReplaceField("Region", region);
    

グループ小計値をRichTextフィールドに表示するコードを追加する

Visual Basic

  1. rptLetterのデザイナ面を右クリックし、[コードの表示]をクリックして、レポートのコードを表示します。
  2. rptLetterのコードビューの、上部左側のドロップダウンキーをクリックし、GroupHeaderを選択します。
  3. rptLetterのコードビューの、上部右側のドロップダウンキーをクリックし、BeforePrintを選択し、BeforePrintイベントのイベント処理メソッドを作成します。
    メモ: レポートを表示する直前に、小計フィールドの最終的な集計値を取得するには、Formatイベントの代わりにBeforePrintイベントを使用します。セクションイベントの使用の詳細については、「セクションレポートのイベント」のトピックを参照してください。
  4. RichTextBoxコントロールにある小計フィールドの値を、GroupHeaderセクションにある非表示のテキストボックスの値に変更するために、ハンドラに以下のコードを追加します。
    Visual Basicコード (GroupHeaderのBeforePrintイベント内に貼り付けます)
    コードのコピー
    '非表示の小計フィールドから値を使用する
    Me.RichTextBox1.ReplaceField("SubTotal", Me.txtSubtotal1.Text)
    

C#

  1. rptLetterのデザイナ面のGroupHeaderセクションを選択します。
  2. [プロパティ]ウィンドウのイベントアイコンをクリックし、レポートのイベント一覧を表示します。
  3. BeforePrintをダブルクリックし。BeforePrintイベントのイベント処理メソッドを作成します。
  4. RichTextBoxコントロールにある小計フィールドの値を、GroupHeaderセクションにある非表示のテキストボックスの値に変更するために、ハンドラに以下のコードを追加します。 
    C#コード (GroupHeaderのBeforePrint内に貼り付けます)
    コードのコピー
    //非表示の小計フィールドから値を使用する
    this.richTextBox1.ReplaceField("SubTotal", this.txtSubtotal1.Text);
    

レポートを表示する

または