DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGrid内の特定の行のバックカラーをコードにて変更

環境/言語:[WindowsXP/VB.NET]
分類:[.NET]

「DataGrid内の特定のセルの色を変える」を.NET Tipsにて参考にさせて
頂いています。今回、特定のセルの値によって、その行すべてセルのバックカラー
を変更しようと試みております。
Tipsでは、
'セルの値を取得する
Dim cellValue As Object = _
Me.GetColumnValueAtRow(source, rowNum)

のようにしてセルの内容を取得しておりますが、この部分を
同一行の他のセルの値を参照する事でバックカラーを変更できないかと考えましたが良い案が思いつきません。
どなたか、アドバイスを頂けないでしょうか。宜しくお願いいたします。
お世話になります。

■No12898に返信(なやみ君さんの記事)
> 「DataGrid内の特定のセルの色を変える」を.NET Tipsにて参考にさせて
> 頂いています。今回、特定のセルの値によって、その行すべてセルのバックカラー
> を変更しようと試みております。
> Tipsでは、
> 'セルの値を取得する
> Dim cellValue As Object = _
> Me.GetColumnValueAtRow(source, rowNum)
>
> のようにしてセルの内容を取得しておりますが、この部分を
> 同一行の他のセルの値を参照する事でバックカラーを変更できないかと考えましたが良い案が思いつきません。
> どなたか、アドバイスを頂けないでしょうか。宜しくお願いいたします。
>
見ていらっしゃるのは、こちら↓ですよね。
http://dobon.net/vb/dotnet/datagrid/coloredcell.html

やったことが無いので不確かですが、
CurrencyManager型の変数sourceの
Position プロパティを操作すれば出来そうな感じがしますね。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsbindingmanagerbaseclasspositiontopic.asp
こちらが参考になると思います。

DataGrid行への色づけについて
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=9321
なおこ様・trapemiya様 アドバイス有難う御座いました。
早速、アドバイスを基に考え製作しましたところ無事目的を達成する事が
出来ました。以下にコードを添えておきます。

'DataGridTextBoxColumnを継承してクラスを作成

Public Class MyDataGridTextBoxColumn
Inherits DataGridTextBoxColumn

Dim myDataRowView As DataRowView   

'Paintメソッドをオーバーライドする
Protected Overloads Overrides Sub Paint( _
          ByVal g As Graphics, _
          ByVal bounds As Rectangle, _
          ByVal source As CurrencyManager, _
          ByVal rowNum As Integer, _
          ByVal backBrush As Brush, _
          ByVal foreBrush As Brush, _
          ByVal alignToRight As Boolean _
          )

  '現在行の各列の値を取得
  myDataRowView = CType(source.List(rowNum), DataRowView)

  '現在行より取得したい列のアイテムの値を取得し条件判断
  If CType(myDataRowView.Item("State"), String) = "未製作" Then
     foreBrush = New SolidBrush(Color.Black)
     backBrush = New SolidBrush(Color.White)
  ElseIf CType(myDataRowView.Item("State"), String) = "製作中" Then
     foreBrush = New SolidBrush(Color.Red)
     backBrush = New SolidBrush(Color.Yellow)
  ElseIf CType(myDataRowView.Item("State"), String) = "製作完" Then
     foreBrush = New SolidBrush(Color.Yellow)
     backBrush = New SolidBrush(Color.Blue)
  End If

  '基本クラスのPaintメソッドを呼び出す
  MyBase.Paint(g, bounds, source, rowNum, _
  backBrush, foreBrush, alignToRight)

End Sub
End Class

上記のようにする事で目的を達成する事が出来ました。
どうも有難う御座いました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板