- PR -

DataGridView行選択時の色変更をしない

投稿者投稿内容
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-20 23:19
#確認(だけ)ですが・・
引用:
BBさんの書き込み (2007-01-20 23:10) より:
A@のDataGridViewの各セルの値に対して(1-3の値が入る)
 1→red
 2→yellow
 3→green
 を設定


この部分は
引用:
KIさんの書き込み (2007-01-20 15:33) より:
特定のセルの背景色を変えたいのなら、DefaultCellStyleではなく、
そのセル(DataGridViewCell)のBackColor, SelectionBackColorを
設定すべきではないでしょうか?


のとおり、BackColor, SelectionBackColorとも設定している・・ということでよろしいですか?
BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2007-01-20 23:38
BackColor, SelectionBackColorとも設定している
という認識で問題ありません。

GUIのプロパティにて デフォルトではHighlightで設定されていますが
それを空白にしてもう一度開いてみるとHighlightが入ってしまうので。。。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-01-21 10:49
私の理解能力が足りないのかも知れませんが、
処理についてではなく、実現したい動きがよくわかりませんので、
もう数点確認させてください。

バインドしたデータが、3列(仮にA列,B列,C列)あったとして、
そのうちのC列には必ず「red」「yeloow」「green」のいずれかの値が入る。
ここで、C列が「red」である行は(選択されていない状態のとき)

1. C列のセルのみ背景が赤色になる
2. 行全体の背景が赤色になる

のどちらでしょうか?

上の回答が1だとした場合、行のヘッダーをクリックして行を選択したとき、
その行の背景色の状態は

1. 選択前と同じ(C列は赤色で、他の列はデフォルトのハイライト表示の背景色)
2. C列を含めハイライト表示

のどちらでしょうか?

「DefulatCellStyle.SelectionBackColorが設定される」とかではなく、
動きとして、現状がこうで、現状のどこが問題(どうしたいか)を教えて頂きたいのです。

引用:

GUIのプロパティにて デフォルトではHighlightで設定されていますが
それを空白にしてもう一度開いてみるとHighlightが入ってしまうので。。。


Designerファイルを直接編集してその行を消せば、できなくはないでしょうが、
それにより上記動作が実現できるとは思いません。
Colorは構造体(値型)ですので、設定しなくてもデフォルト値が入るだけだと思います。
BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2007-01-21 22:47

>1. C列のセルのみ背景が赤色になる
>2. 行全体の背景が赤色になる

>のどちらでしょうか?
1.になります。


>1. 選択前と同じ(C列は赤色で、他の列はデフォルトのハイライト表示の背景色)
>2. C列を含めハイライト表示

>のどちらでしょうか?
2.になります。

やりたいこと
2.ではなく1.にしたいのです。

よろしくお願いいたします。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-01-21 23:35
DataGridViewのRowsAddedイベントや、CellValueChangedイベントで、
該当セルのStyle.BackColor, Style.SelectionBackColorに
同じ色を設定すればよいと思います。
DefaultCellStyleは使用していませんが…こんな感じでどうでしょう?

コード:

    Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

        '色を変える列のインデックスが1の場合
        If e.RowIndex >= 0 AndAlso e.ColumnIndex = 1 Then
            Dim cell As DataGridViewCell = DataGridView1(e.ColumnIndex, e.RowIndex)
            Dim setColor As Color

            '--------------------------------------
            'ここでsetColorに設定したい色を設定する
            '--------------------------------------

            cell.Style.BackColor = setColor
            cell.Style.SelectionBackColor = setColor
        End If
    End Sub

    Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded

        For i As Integer = 0 To e.RowCount - 1
            '色を変える列のインデックスが1の場合
            Dim cell As DataGridViewCell = DataGridView1(1, e.RowIndex + i)
            Dim setColor As Color

            '--------------------------------------
            'ここでsetColorに設定したい色を設定する
            '--------------------------------------

            cell.Style.BackColor = setColor
            cell.Style.SelectionBackColor = setColor
        Next
    End Sub

BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2007-01-24 10:29
KI様

教えていただいた方法で解決することができました。
ありがとうございます。

やはりSelectionBackColorはなにか指定しないとまずいんですね。。。
勉強になりました。

スキルアップ/キャリアアップ(JOB@IT)