| 2020/03/24(Tue) 14:17:52 編集(投稿者)
■No94188 (あい さん) に返信 > 何個かデータがあるうちの一つのセルに、カラーコードのデータを表示しています。 > ------------------------------------ > データ1|データ2|データ3|色表示 > ------------------------------------ > | | |#d7e4bd > ------------------------------------ > | | |#ffcc66 > ------------------------------------
(1) 上記のどこを着色したいのでしょうか?
たとえば「3 列目だけ」に色をつけたいのであれば、 CellFormatting イベントで 「e.ColumnIndex の値が 3 だった時」にのみ e.CellStyle を調整するようなコードにすれば OK です。 調整が不要なセルの場合は、何も変更せずに Return してください。
(2) DataGridView 上に "#d7e4bd" という文字列は見えていた方が良いですか? 見えていない方が良いですか?
見えている必要がある場合は、該当セルのスタイルで、 前景色と背景色が同色もしくは近似色にならないようにしておきましょう。
見えている必要が無いのなら、そもそも [BACKGROUND] フィールドを DataGridView の列に バインドする必要はありません。先のサンプルでも示したように、 イベント内からは DataBoundItem 経由で、DataTable 上の [BACKGROUND] フィールドにアクセスできるためです。
Dim gridRow = DirectCast(sender, DataGridView).Rows(e.RowIndex) Dim rowView As DataRowView= TryCast(gridRow.DataBoundItem, DataRowView) If rowView IsNot Nothing Then Dim oColor As Object = rowView("BACKCOLOR") 'Dim row As DataRow = rowView.Row 'Dim table As DataTable = row.Table End If
(3) 色情報の値検査を行う必要がありますか?
ColorTranslator.FromHtml() の場合、 たとえば "#ffcc66" の他、"#fc6" 形式の省略表記、 "LightSalmon"、"SandyBrown" などの Web カラー名や、 "InfoBackground" や "ThreeDDarkShadow" などのシステム名も扱えます。
もし、常に「# + 16進数6桁」形式しか認めない方針とするならば、 正規表現検査を加えた上で、不正な値の場合の着色方針を定める必要があるかもしれません。 |