- PR -

Datagridの特定のセルの背景色変更

投稿者投稿内容
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-04-14 11:42
VB.NET2003で開発をしております。
Datagridの特定のセルの背景色を変更したいのですが、方法がわかりません。
やりたいこととしては、
・DataGridに表示されているデータは変更可能です
・更新ボタンがありそのボタンを押すとDataGridをチェックして、エラー箇所の背景を赤く変える

いろいろと探していて「どぼん!」さんのサイトに
http://dobon.net/vb/dotnet/datagrid/coloredcell.html
を見つけたのですが、これですと、行単位での色の変更になります。
行、列を指定して背景色の変更ができる方法をご存知の方、ご教授願います

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-14 12:36
引用:

Natsumeさんの書き込み (2006-04-14 11:42) より:

これですと、行単位での色の変更になります。


記事のタイトルに注目してください > 「特定のセルの色を変える」
'条件' を書く必要があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-14 12:46
何に対して色を変更しているのかとか
ステップ実行してみるとどうなっているかわかりますね
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-04-14 13:05
じゃんぬねっとさん、失礼しました、私が勘違いしておりました
確かに「どぼん!」さんのサイトには特定のセルの色を変えると書いてありました
しかしながら、私のやりたいこととはちょっと違いますので、再度やりたいことを記述させていただきます

まず、「どぼん!」さんのサイトの方法では
すべてのセルに対して値が何々なら色を変える、また、DataGridに入力された時点でPaintメソッドが実行されるのでその時点で色が変わります。

私がしたいのでは
DataGridに入力された時点では色は変えたくないです、色を変えるのはDataGridに入力された後に、更新ボタン(これはフォームに貼り付けているものです)を押したタイミングでDataGridをチェックして、入力エラーのセルのみ色をかえるです。

説明不足で申し訳ございませんでした。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-04-14 13:37
別に違ってませんよ。単にちょっと条件が複雑になってるだけです。
更新ボタンの Click イベントで対象の DataGridTextBoxColumn 派生クラスのインスタンスに「色変えることフラグ」を立てれば良いでしょう。
// 立てた後 DataGrid を Reflesh しないと駄目かな。
DataGridTextBoxColumn 派生クラスの Paint では「色変えることフラグ」が立ってるかどうかを見て色を変えるか判断します。
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-04-14 13:54
Hongliangさん、どうもありがとうございます
確かに、色を変えるフラグを立てれば、できそうですが、もうひとつ問題があります
DataGridには列が2つあります、1列目は表示のみ、2列目は変更可能です
「どぼん!」さんのサイトのサンプルでは、

'セルの値を取得する
Dim cellValue As Object = _
Me.GetColumnValueAtRow(source, rowNum)

If Not cellValue Is Nothing Then
'値が"0"のセルの前景色と背景色を変える
If CType(cellValue, String) = "0" Then
foreBrush = New SolidBrush(Color.White)
backBrush = New SolidBrush(Color.Black)
End If
End If
このようにすべてのセルが条件になり、値が0なら色を変えるようになっています。
私の場合、1列目は色を変える対象ではないので、2列目の値だけをチェックして色を変えたいです。
上記ソースの中で今は何列目(カラム番号)かが判れば2列目だけにチェックを入れて色を変えることができると考えています。

そこで、Paintメソッド内で、今何列目かが判るようでしたらご教授願います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-14 13:59
引用:

Natsumeさんの書き込み (2006-04-14 13:54) より:

If CType(cellValue, String) = "0" Then


ですから、この条件が変わるだけだと申し上げているのですが...
後は Hongliang さんの案どおりだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-04-14 14:16
じゃんぬねっとさんへ、
If CType(cellValue, String) = "0" Then
確かにそうなのですが....

DataGridの列が2列あって
--------------
列1| 列2
--------------
1 | AAA
0 | BBB
1 | 0
このような場合、列1の2行目と列2の3行目が0なのでセルの色が変わります
私がしたいのは、列1はチェックせず、列2のみチェックしたいのです(列2の3行目のセルの色だけを変えたい)
ですので、Paintメソッド内で、今どの列の値をチェックしているのかが判れば判断できると考えております。

すみません、何か勘違いしているようでしたらご指摘願います。

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