ActiveReportsでは、RichTextBoxコントロールを使用して、差し込み形式のレポートを作成することができます。RichTextBoxコントロールに、値の置き換え用の固定フィールド(マージフィールド)を設定すると、実行時に実際の値に置き換えることができます。このチュートリアルでは、RichTextBoxコントロールを使用したメールマージレポートの作成方法を紹介します。
このトピックでは、以下のタスクを行います。
- Visual StudioプロジェクトにActiveReportを追加する
- レポートをデータソースに接続する
- レポートのレイアウトを作成する
- RichTextコントロールにフィールドとテキストを追加する
- FetchDataイベントを使用して、データソースから情報を取得する
- RichTextBoxコントロールで、各レコードのフィールド値を更新するコードを追加する
- グループ小計値をRichTextフィールドに表示するコードを追加する
- レポートを表示する
 |
メモ: このチュートリアル、Northwindデータベース(Nwind.mdb)のファイルを使用しています。使用にはNorthwindデータベース(..ActiveReportsNET11\Data\Nwind.mdb)へのアクセス権限が必要です。 |
チュートリアルを完了すると、次のレポートが作成されます。
デザイン時のレイアウト
実行時のレイアウト
Visual StudioプロジェクトにActiveReportを追加する
- Visual Studioで新規プロジェクトを開きます。
- [プロジェクト]メニューから[新しい項目の追加]を選択します。
- [新しい項目を追加]ダイアログから[ActiveReports 11.0 セクションレポート(コード)]を選択し、名前を「rptLetter」に変更します。
- [追加]ボタンをクリックします。
詳細については、「プロジェクトにレポートを追加する」を参照してください。
レポートをデータソースに接続する
- Detailセクションバンドのデータソースアイコンをクリックします。

- [レポートデータソース]ダイアログで、[OLE DB]タブの接続文字列の横にある[作成]ボタンをクリックします。
- [データリンクプロパティ]ウィンドウで、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックし、[接続]タブへ移動します。
- <...>をクリックして、Nwind.mdbへのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
- [接続のテスト]ボタンをクリックし、データベースへの接続を確認します 。
- [OK]をクリックし、[データリンクプロパティ]ウィンドウに戻ります。接続文字列が自動的に追加されていることを確認します。
-
[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 |
- [OK] をクリックし、レポートのに戻ります。
レポートのレイアウトを作成する
- レポートのデザイナ面を右クリックし、[挿入]を選択し、[グループヘッダ/フッタ]を選択して、グループヘッダ、グループフッタを追加します。
- レポートのデザイナ面のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
- レポートのデザイナ面から、GroupHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
プロパティの値 |
DataField |
CustomerID |
Height |
2.5 |
KeepTogether |
True |
- レポートのから、GroupFooterセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
プロパティの値 |
Height |
1.1 |
KeepTogether |
True |
NewPage |
After |
- レポートのから、Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定します。
- レポートのから、PageHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
プロパティの値 |
Height |
0.8 |
BackColor |
Coral |
- ツールボックスから、PageHeaderセクションに「Label」コントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
Label
プロパティ名 |
プロパティの値 |
Location |
0, 0 in |
Size |
6.5, 0.65 in |
Text |
GraepeCity |
Font Size |
36 |
Font Bold |
True |
- [レポートエクスプローラ]から、[フィールド]ノードを展開し、[バウンドフィールド]ノードを展開します。GroupHeaderセクションに[SubTotal]フィールドをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
プロパティの値 |
Location |
4, 0 in |
Size |
1, 0.2 in |
Name |
txtSubtotal1 |
OutputFormat |
Currency |
Visible |
False |
SummaryType |
SubTotal |
SummaryGroup |
GroupHeader1 |
 |
メモ: txtSubtotal1は非表示であるが、[RichTextBox]コントロールの中で表示する値と書式を提供するために必要です。 |
- ツールボックスから、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 |
- [レポートエクスプローラ]から[フィールド]ノードを展開し、[バウンドフィールド]ノードを展開します。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 |
- ツールボックスから、GroupFooterセクションにLabelコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
Label
プロパティ名 |
プロパティの値 |
Location |
5.15, 0.8 in |
Size |
1.35, 0.2 in |
Text |
以上 |
- ツールボックスから、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コントロールにフィールドとテキストを追加する
- [RichTextBox]コントロールをダブルクリックし、デフォルトのテキストを削除します。
- [RichTextBox]コントロールをダブルクリックし、右クリックから[フィールドの追加]を選択します。
- [フィールドの追加]ダイアログから[Date]を入力し、[OK]をクリックします。
- [RichTextBox]コントロールに表示された[!Date]テキストの前に、行の右端までスペースを追加します(次の行に重ならないように)。
- テキストの端にカーソルを移動し、[Enter]キーを押して次の行に移動します。
-
[フィールドの追加]ダイアログを使用し、各フィールドを挿入します(各フィールドの配置は、前述のデザイン時のレイアウトの画像を参照してください)。
- CompanyName
- ContactName
- Address
- City
- Region
- Country
- SubTotal
- ContactName
- すべてのフィールドを追加した後に、[RichTextBox]コントロールに以下のテキストを追加します。
RichTextコントロールに貼り付けます |
コードのコピー
|
[!ContactName] 様
お世話になっております。貴方の昨年の受注合計は一覧のように[!SubTotal]となっております。どうぞご確認ください。ご不明な点は1-800-DNT-CALLまでご連絡いただきますようお願い申し上げます。
|
- テキストエディタで行うような要領で、コントロール内のテキストとフィールドを配置します。
FetchDataイベントを使用して、データソースから情報を取得する
Visual Basic
- レポートのコードビューを表示し、上部左側のドロップダウンキーをクリックし、rptLetterイベントを選択します。
- レポートのコードビューの、上部右側のドロップダウンキーをクリックし、FetchDataを選択し、FetchDataイベントのイベント処理メソッドを作成します。
- 顧客の住所に地域情報がある場合に、カンマとスペースを追加するために、ハンドラにコードを追加します。
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#
- レポートのデザイナ面から、レポートの下のグレーの領域をクリックします。
- [プロパティ]ウィンドウのイベントアイコンをクリックし、レポートのイベント一覧を表示します。
- FetchDataをダブルクリックし、FetchDataイベントのイベント処理メソッドを作成します。
- 顧客の住所に地域情報がある場合に、カンマとスペースを追加するために、ハンドラにコードを追加します。
C#コード (FetchDataイベントの上に貼り付けます) |
コードのコピー
|
string region;
|
C#コード (FetchDataイベント内に貼り付けます) |
コードのコピー
|
if(Fields["Region"].Value is System.DBNull)
region = "";
else
region = ", " + Fields["Region"].Value.ToString();
|
RichTextBoxコントロールで、各レコードのフィールド値を更新するコードを追加する
- レポートのデザイナ面から、GroupHeaderセクションをダブルクリックし、GroupHeaderのFormatイベントのイベント処理メソッドを作成します。
- 以下のタスクを行うために、ハンドラにコードを追加します。
- 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
- rptLetterのデザイナ面を右クリックし、[コードの表示]をクリックして、レポートのコードを表示します。
- rptLetterのコードビューの、上部左側のドロップダウンキーをクリックし、GroupHeaderを選択します。
- rptLetterのコードビューの、上部右側のドロップダウンキーをクリックし、BeforePrintを選択し、BeforePrintイベントのイベント処理メソッドを作成します。
 |
メモ: レポートを表示する直前に、小計フィールドの最終的な集計値を取得するには、Formatイベントの代わりにBeforePrintイベントを使用します。セクションイベントの使用の詳細については、「セクションレポートのイベント」のトピックを参照してください。 |
- RichTextBoxコントロールにある小計フィールドの値を、GroupHeaderセクションにある非表示のテキストボックスの値に変更するために、ハンドラに以下のコードを追加します。
Visual Basicコード (GroupHeaderのBeforePrintイベント内に貼り付けます) |
コードのコピー
|
'非表示の小計フィールドから値を使用する
Me.RichTextBox1.ReplaceField("SubTotal", Me.txtSubtotal1.Text)
|
C#
- rptLetterのデザイナ面のGroupHeaderセクションを選択します。
- [プロパティ]ウィンドウのイベントアイコンをクリックし、レポートのイベント一覧を表示します。
- BeforePrintをダブルクリックし。BeforePrintイベントのイベント処理メソッドを作成します。
- RichTextBoxコントロールにある小計フィールドの値を、GroupHeaderセクションにある非表示のテキストボックスの値に変更するために、ハンドラに以下のコードを追加します。
C#コード (GroupHeaderのBeforePrint内に貼り付けます) |
コードのコピー
|
//非表示の小計フィールドから値を使用する
this.richTextBox1.ReplaceField("SubTotal", this.txtSubtotal1.Text);
|
レポートを表示する
- デザイン時にレポートを表示するには、プレビュータブをクリックします。
または