- 題名: DataGridViewのセル文字色
- 日時: 2010/07/07 11:33:40
- ID: 27040
- この記事の返信元:
- (なし)
- この記事への返信:
- [27041] Re[1]: DataGridViewのセル文字色2010/07/07 12:29:30
- ツリーを表示
■No27040に返信(イデアさんの記事)
> CellFormattingイベントはあえて使わず、
今回のようなケースでは、CellFormattingイベントで動的指定した方が
都合が良いと思いますよ。
> DataSource の設定を行った後に文字色の設定を行ったのですが、
> 先頭行だけが変わってくれませんでした。
ForeColor だけを変更されているようですが、
SelectionForeColor および背景色はどのように設定していますか?
> For i As Integer = 0 To .Rows.Count - 1
For Each の方が楽かと思います。
> Dim objColorCvr As New ColorConverter
ループ内で毎回生成しなおす必要は無いはずです。ループ外に出しましょう。
> 'FONTCOLOR 列のセルの値によって文字色を設定
このコードだと、セルの内容によっては色変換できない可能性がありますよ。
(たとえば新規行など)
> またスタイルの優先順位が関係しているのでしょうか?
また、というのが何と比較しての話か見えていないのですが、
優先順位を考慮するのであれば、Style ではなく
InheritedStyle を確認してみてください。
> ただ、先頭行だけというのがわかりません。
とりあえず、DataGridView を貼っただけの環境で試しましたが、
先頭行の色も設定されました。なお、objDT や dgvSample については、
下記のようにしています。
Private objDT As DataTable
Private Sub Form1_Load() Handles MyBase.Load
objDT = New DataTable("Table1")
objDT.Columns.Add("Col1")
objDT.Columns.Add("FONTCOLOR")
objDT.Rows.Add("100", "Red")
objDT.Rows.Add("200", "Green")
objDT.Rows.Add("300", "DarkBlue")
objDT.Rows.Add("400", "Orange")
dgvSample.Columns.Clear()
dgvSample.Columns.Add(New DataGridViewTextBoxColumn() With {.DataPropertyName = "Col1"})
dgvSample.Columns.Add(New DataGridViewTextBoxColumn() With {.Name = "FONTCOLOR", .DataPropertyName = "FONTCOLOR", .Visible = False})
With dgvSample
'イデアさんの No27040 のコード
End With
End Sub
返信ありがとうございます。 ■No27041に返信(魔界の仮面弁士さんの記事) > ■No27040に返信(イデアさんの記事) >>CellFormattingイベントはあえて使わず、 > 今回のようなケースでは、CellFormattingイベントで動的指定した方が > 都合が良いと思いますよ。 最初はCellFormattingイベントで記述したのですが、 スクロールをすると表示行の色がパラパラといった感じで 変わるのが見えたために使うのをやめました。 >>DataSource の設定を行った後に文字色の設定を行ったのですが、 >>先頭行だけが変わってくれませんでした。 > ForeColor だけを変更されているようですが、 > SelectionForeColor および背景色はどのように設定していますか? まさに失念していました。 今回は表示するだけの単純なもので、 行を追加、更新、削除することもなければ、選択することもなかったために その可能性を忘れていました。 >> For i As Integer = 0 To .Rows.Count - 1 > For Each の方が楽かと思います。 > >> Dim objColorCvr As New ColorConverter > ループ内で毎回生成しなおす必要は無いはずです。ループ外に出しましょう。 > >> 'FONTCOLOR 列のセルの値によって文字色を設定 > このコードだと、セルの内容によっては色変換できない可能性がありますよ。 > (たとえば新規行など) >>またスタイルの優先順位が関係しているのでしょうか? > また、というのが何と比較しての話か見えていないのですが、 > 優先順位を考慮するのであれば、Style ではなく > InheritedStyle を確認してみてください。 数々の助言ありがとうございます。 たしかにそうですね…、ソースについては変更を検討します。 魔界の仮面弁士さんの指摘どおり、SelectionForeColor の設定忘れでした。 こんな単純なミスでしたが、わざわざありがとうございます。 無事解決しました。
分類:[.NET]
再びDataGridViewのセルスタイルに悩んでいます。 行いたいことは次の処理です。 1、DBに登録されているFONTCOLORデータをセルの文字色として設定する。 CellFormattingイベントはあえて使わず、DataSource の設定を行った後に 文字色の設定を行ったのですが、先頭行だけが変わってくれませんでした。 ソースは次のように記述しています。 With dgvSample 'ヘッダー非表示 .ColumnHeadersVisible = False .AutoGenerateColumns = False .DataSource = objDT For i As Integer = 0 To .Rows.Count - 1 Dim objColorCvr As New ColorConverter 'FONTCOLOR 列のセルの値によって文字色を設定 .Rows(i).Cells(0).Style.ForeColor = CType(objColorCvr.ConvertFromString(CStr(.Rows(i).Cells("FONTCOLOR").Value)), Color) objColorCvr = Nothing Next End With デバッグをしてみると、先頭行にもセルスタイルは設定していました。 またスタイルの優先順位が関係しているのでしょうか? ただ、先頭行だけというのがわかりません。 わかる方がいましたら、よろしくお願いします。