none
Reportで特定の行の背景色を変更したい RRS feed

  • 質問

  • VB2005で開発しています。

    帳票を利用する必要があるため、
    Report機能を利用しようと考えております。

    現在のプログラムは次のような形です。

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles MyBase.Load
            With Me.DataSet1.DataTable1
                .AddDataTable1Row(1, "ああああああ", "男")
                .AddDataTable1Row(2, "いいいいいい", "男")
                .AddDataTable1Row(3, "うううううう", "女")
                .AddDataTable1Row(2, "ええええええ", "男")
            End With
            Me.ReportViewer1.RefreshReport()
        End Sub
    End Class
    参考:http://www.vbstation.net/tips/reporttable.htm

    この場合の「いいいいいい」の行だけの背景色を変更するには、
    何か方法がございますでしょうか?

    もしご存知でしたら、教えてください。
    よろしくお願い致します。

    2010年6月10日 0:27

回答

  • このレポート機能は使ったことがなかったのですが、(資料は見ないで)試行錯誤していたら実現方法がわかりました。

    手順ですが、レポートデザイナーの明細の行の左端をクリック(TableRow2 の選択)し、プロパティの BackgroundColor に次の式(VB構文)を設定します。

    =IIf(Fields!UserName.Value = "いいいいいい", "Yellow", "Transparent")

    最初はコードが書けるイベントを探していたのですが、どうやらそういうものはないようで、その代わりとして、ほとんどのプロパティに対して式が設定できるようになっていました。
    式はプロパティウィンドウの値入力欄に直接入力することもできますし、選択肢の中の "<式...>" を選択すれば一覧から命令を選択する形で式を構築できる画面が利用できます。

    ただ、プロパティにあまり複雑な式を書いてしまうと保守性が悪くなると思いますので、なるべくデータを準備する段階で制御用の値も準備しておき(たとえば RowBackColor 列など)、プロパティへの式としては "=Fields!RowBackColor.Value" のような感じの簡単な式にしておくのも良いかもしれないと思いました。

    • 編集済み TH01 2010年6月10日 7:15 ちょっとした文章修正
    • 回答としてマーク コンドル 2010年6月10日 9:41
    2010年6月10日 6:04

すべての返信

  • このレポート機能は使ったことがなかったのですが、(資料は見ないで)試行錯誤していたら実現方法がわかりました。

    手順ですが、レポートデザイナーの明細の行の左端をクリック(TableRow2 の選択)し、プロパティの BackgroundColor に次の式(VB構文)を設定します。

    =IIf(Fields!UserName.Value = "いいいいいい", "Yellow", "Transparent")

    最初はコードが書けるイベントを探していたのですが、どうやらそういうものはないようで、その代わりとして、ほとんどのプロパティに対して式が設定できるようになっていました。
    式はプロパティウィンドウの値入力欄に直接入力することもできますし、選択肢の中の "<式...>" を選択すれば一覧から命令を選択する形で式を構築できる画面が利用できます。

    ただ、プロパティにあまり複雑な式を書いてしまうと保守性が悪くなると思いますので、なるべくデータを準備する段階で制御用の値も準備しておき(たとえば RowBackColor 列など)、プロパティへの式としては "=Fields!RowBackColor.Value" のような感じの簡単な式にしておくのも良いかもしれないと思いました。

    • 編集済み TH01 2010年6月10日 7:15 ちょっとした文章修正
    • 回答としてマーク コンドル 2010年6月10日 9:41
    2010年6月10日 6:04
  • TH01様

    ご回答ありがとうございます。
    無事解決することができました。

    BackgroundColorプロパティに式を設定できたのですね。

    とても勉強になりました。
    VBの構文が使えるのであれば、かなり柔軟に対応できそうですね。

    ありがとうございました。

    2010年6月10日 9:41
  • 念のため補足させてください。

    VB構文とはいっても、使える命令は式の編集画面の一覧にあるものだけのようですので、柔軟かどうかはわかりません。(^^;
    ただしその点は、データの準備処理の段階で十分にカバーできると思います。

    調査の際、私はC#の新規作成プロジェクトで確認していたのですが、試行錯誤中はVBフォーラムの話だとすっかり忘れていましたので、式で使える構文がC#ではなくVBであることを重要な話としてお伝えしないといけないと思い注釈を入れさせてもらっただけで、柔軟性を強調したつもりではありませんでした。(^^;

    レポートの機能はなんとなく避けていたので、勉強になったのは私も同じです。(^^)

    追記:
    ↓「埋め込みコード」という機能があることを知りました。
    http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/4aab2f82-463b-4091-aa8f-c166f907cea4
    なので、この補足は余分でした。。

    • 編集済み TH01 2010年9月22日 4:44 いまさらですが追記
    2010年6月10日 10:12
  • 補足説明ありがとうございます。

    >VB構文とはいっても、使える命令は式の編集画面の一覧にあるものだけのようですので、柔軟かどうかはわかりません。(^^;
    >ただしその点は、データの準備処理の段階で十分にカバーできると思います。
    ありがとうございます。
    私も検証しましたので、大体分かりましたが、
    VB構文を使えることに気付いておりませんでしたので、それ以前と比べてできることが多いと感じたため、
    柔軟と書かせて頂きました。

    C#のプログラムでもVB構文だったのですね。
    私はC#のプログラムも作りますので、この点は注意が必要ですね。
    勉強になりました。

    2010年6月11日 6:57