罫線とデータの折り返しが含まれる帳票-「データ表示」
複数のデータフィールドを1つのTextBoxで表示する
お店の名前と住所の項目ですが、別々のテキストボックスに貼り付けると、先ほど説明したように、縦線コントロールが二つのコントロールをまたいでいるため、折り返した際に重なって表示されてしまいます。
そこで、二つの項目を同じTextBoxにまとめて表示させることで、重なりを回避します。1つのTextBoxコントロールに複数の値を表示させるには、DataFieldプロパティを次のように設定します。
ShopNameはテーブルの店名、ShopZipは郵便番号、ShopAdress1とShopAdress2は住所のカラム名です。先頭に「=」をつけると、ソース上の記述のようにプロパティを設定することができます。
二つの項目のフォント設定が異なる場合は、TextBoxコントロールではなく、RichTextBoxコントロールを用います。RichTextBoxコントロールはテキストの表示に複数のフォントや色を設定することのできるコントロールです。
//リッチテキストのフォント設定 Font richTextHeaderFont = new Font("MS 明朝", 12f, FontStyle.Bold); //リッチテキスト内の範囲指定をする this.richTextBoxShopNameAdress.SelectionStart = 0; this.richTextBoxShopNameAdress.SelectionLength = this.textBoxShopName.Text.Length; //選択した部分のフォントを変更する this.richTextBoxShopNameAdress.SelectionFont = richTextHeaderFont;
'リッチテキストのフォント設定 Dim richTextFont As New Font("MS 明朝", 12.0F, FontStyle.Bold) 'リッチテキスト内の範囲選択をする RichTextBox1.SelectionStart = 0 RichTextBox1.SelectionLength = Me.TextBoxShopName.Text.Length '選択したフォントを変更する RichTextBox1.SelectionFont = richTextFont
このサンプルでは、店名の長さを取得するためと背景色をつけるために、店名のみをDataFieldに設定したtextBoxShopNameというTextBoxを配置しています。
書式つき文字列にデータをバインドする
RichTextBoxコントロールでのデータバインド
RichTextコントロールでは、テキスト内にデータフィールドの値をバインドして表示させることができます。リッチテキストコントロールをダブルクリックするとテキストの編集が可能ですが、そこで
(消費税 [!TaxAmt]円)
のように記述すると、データフィールドの値をバインドすることができます。
[! ]内はFieldsのカラム名を指定します([フィールドの追加]からも指定できます)。
データソース(バウンドフィールド)の場合、はじめから値が入っていますが、自分で編集した値を組み込む場合は、前々回紹介したようにアンバウンドフィールドを作成(実行時にフィールドを追加)して使用してください。
TextBoxコントロールでのデータバインド
TextBoxコントロールのOutputFormatプロパティには、書式文字列を指定できます。
private void detail_Format(object sender, EventArgs e) { TextBoxDtilTaxAmt.OutputFormat = "\\(消費税 ###,###,##0\\円)"; }
Private Sub Detail_Format( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Detail.Format TextBoxDtilTaxAmt.OutputFormat = "\\(消費税 ###,###,##0\\円)" End Sub
この例では書式を指定する(###,###,##0)の前後にも「消費税」や「円」などの文言が含まれています。金額の範囲が0以上であることが保証されていればこの方法でよいのですが、マイナスの値が入ってくると「-(消費税 3,000 円)」のように、書式の外側にマイナス記号が表示されてしまいます。
このような場合はReportStartイベントでTextBoxコントロールのOutputFormatプロパティに書式のみを指定し、前後の文言はdetail_formatイベントで再設定することで、「(消費税 -3,000 円)」のように期待する結果を出力することができます。
private void NewActiveReport1_ReportStart(object sender, EventArgs e) { TextBoxDtilTaxAmt.OutputFormat = "###,###,##0"; } private void detail_Format(object sender, EventArgs e) { TextBoxDtilTaxAmt.Text = "(消費税 " + TextBoxDtilTaxAmt.Text + "円)"; }
Private Sub NewActiveReport1_ReportStart( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.ReportStart TextBoxDtilTaxAmt.OutputFormat = "###,###,##0" End Sub Private Sub Detail_Format( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Detail.Format TextBoxDtilTaxAmt.Text = _ "(消費税 " + TextBoxDtilTaxAmt.Text + "円)" End Sub