コントロールのプロパティを動的に変更する方法は?

文書番号 : 37785     文書種別 : 使用方法     登録日 : 2015/03/12     最終更新日 : 2015/03/12
文書を印刷する
対象製品
ActiveReports for .NET 9.0J
詳細
コントロールのプロパティを動的に変更する方法は、レポートの形式によって異なります。
  1. セクションレポートの場合
  2. ページレポート/RDLレポートの場合


セクションレポートの場合

セクションレポートの場合、ActiveReportsのイベントにコントロールのプロパティを変更するコードを実装することで、動的な変更を実現できます。

たとえば、以下のようなコードになります。

◆サンプルコード(VB.NET)
Private Sub Detail1_Format(...) Handles Detail1.Format
  ' Textプロパティの値を別の文字列に変換します。
  Dim s As String
  Select Case Me.TextBox1.Text
    Case "1" : s = "文字列1"
    Case "2" : s = "文字列2"
    Case "3" : s = "文字列3"
    Case Else : s = "文字列X"
  End Select
  Me.TextBox1.Text = s

  ' (X=2, Y=1.5)センチの位置に移動します。(※1)
  Me.TextBox1.Location = New System.Drawing.PointF( _
    GrapeCity.ActiveReports.SectionReport.CmToInch(2.0F), _
    GrapeCity.ActiveReports.SectionReport.CmToInch(1.5F))

  ' "MS ゴシック"の14pt、太字+斜体に変更します。(※2)
  Me.TextBox1.Font = New System.Drawing.Font("MS ゴシック", 14.0F, _
    FontStyle.Bold Or FontStyle.Italic, GraphicsUnit.Point, 128)
End Sub

◆サンプルコード(C#)
private void detail_Format(object sender, EventArgs e)
{
  // Textプロパティの値を別の文字列に変換します。
  string s;
  switch (this.textBox1.Text)
  {
    case "1": s = "文字列1"; break;
    case "2": s = "文字列2"; break;
    case "3": s = "文字列3"; break;
    default: s = "文字列X"; break;
  }
  this.textBox1.Text = s;

  // (X=2, Y=1.5)センチの位置に移動します。(※1)
  this.textBox1.Location = new System.Drawing.PointF(
    GrapeCity.ActiveReports.SectionReport.CmToInch(2.0f),
    GrapeCity.ActiveReports.SectionReport.CmToInch(1.5f));

  // "MS ゴシック"の14pt、太字+斜体に変更します。(※2)
  this.textBox1.Font = new System.Drawing.Font("MS ゴシック", 14.0f,
    System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic,
    System.Drawing.GraphicsUnit.Point, 128);
}

※1Locationプロパティは値型であるため、このプロパティから返されるLocationオブジェクトのメンバ(Location.Xなど)を直接変更することはできません。Locationプロパティを動的に変更する場合は、Locationプロパティのデータ型であるSystem.Drawing.PointFクラスのインスタンスを新たに生成する必要があります。
※2Fontプロパティ以下のプロパティはReadOnlyであるため、たとえばFont.Nameプロパティの値を直接変更するといったことはできません。Fontプロパティを動的に変更する場合は、Fontオブジェクトのインスタンスを新たに生成する必要があります。

なお、コントロールを操作できるのは、そのコントロールが配置されているセクションのイベント(Format、BeforePrint、AfterPrint)内、またはReportStartイベント内のみです。

また、製品ヘルプの以下のトピックもあわせてご覧ください。

ActiveReportsユーザーガイド
 - 概念
  - セクションレポートの概念
   - セクションレポートのイベント
 - 基本操作
  - セクションレポートの基本操作
   - 高度なレポートレイアウトの作成
    - 隔行で色の変更
   - 条件による詳細情報の表示/非表示



ページレポート/RDLレポートの場合

ページレポートやRDLレポートの場合、変更したいコントロールのプロパティに「」を設定することで、動的な変更を実現できます。たとえば、以下のような例が挙げられます。

  1. 出力する値を別の文字列に変換する
    以下のような式をValueプロパティに設定します。

    ◆式
    =Switch(Fields!FieldName.Value="1","文字列1",
      Fields!FieldName.Value="2","文字列2",
      Fields!FieldName.Value="3","文字列3",
      Fields!FieldName.Value<>"","文字列X")

  2. 出力する値がマイナス値の時のみ、フォントを斜体に設定する
    以下のような式をFont.FontStyleプロパティに設定します。

    ◆式
    =IIF(Fields!FieldName.Value<0,"Italic","Normal")

  3. 最終ページのみ値を表示する
    以下のような式をValueプロパティに設定します。

    ◆式
    =IIF(Globals!PageNumber=Globals!TotalPages,Fields!FieldName.Value,"")

式の詳細や使用例については、製品ヘルプの以下のトピックをご覧ください。

ActiveReportsユーザーガイド
 - 概念
  - ページレポート/RDLレポートの概念
   - 式
 - 基本操作
  - ページレポート/RDLレポートの基本操作
   - 高度なページ形式のレイアウトの作成
    - マイナス値の赤表示
    - 隔行で色の変更
 - サンプルとチュートリアル
  - チュートリアル
   - ページレポート/RDLレポートのチュートリアル
    - データ
     - レポートで式の使用
    - カスタマイズ
     - カスタムコードを使用するレポートの作成

なお、この方法が適用可能なプロパティは「式」を設定できる ExpressionInfo型のプロパティのみです。
コントロールの位置やサイズなどを変更することはできません。

ページレポートはデザイン時にページのレイアウトを決定し、そのレイアウト通りに出力することを前提としたレポートです。そのため、コントロールの位置やサイズなど、レイアウトに影響する設定をレポートの実行中に動的に変更することはできません。
関連情報
キーワード
HowTo セクションレポート デザイン・レイアウト ページレポート