- PR -

DataGridの特定セルの背景色の変更方法について

1
投稿者投稿内容
00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-19 10:31
お世話になっております。

タイトルの通りの質問なのですが、http://dobon.net/vb/dotnet/datagrid/coloredcell.html
上の記事を参考にしてDataGridTextBoxColumnクラスを継承した派生クラスを
作成してPaintメソッドをオーバーライドし、値が"0"のセルの前景色を白、背景色を黒にする
プログラムは作成する事が出来ました。
記事のサンプルと全く同じですが一応以下にコードを示します。

Public Class MyDataGridTextBoxColumn
Inherits DataGridTextBoxColumn
'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 _
)
'セルの値を取得する
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
'基本クラスのPaintメソッドを呼び出す
MyBase.Paint(g, bounds, source, rowNum, _
backBrush, foreBrush, alignToRight)
End Sub
End Class

今回質問させていただきたいのは、上のサンプルのようにセルの値を条件にするのではなく、
「何行何列目のセルの背景色を変えたい」
といったような行番号と列番号を指定して背景色を変える方法についてなのです。
また、現在フォーカスのあるセルの背景色を変えるような処理も実現したいと考えています。

上記のサンプルを改良するような方法でも全く異なる方法でも結構です。良い方法をご存知でしたら教えてください。
よろしくお願いします。
whitecloud
会議室デビュー日: 2003/07/07
投稿数: 5
お住まい・勤務地: 東京
投稿日時: 2003-11-20 14:49
こんにちわ。
私のわかる限りではありますが答えさせていただきたいと思います。

DataGridTextBoxColumnなどのPaintメソッドでは表示する際の行番号を
引数として受けとっていますので、それを利用することで○行目のセルの
色を指定すると言うことは可能だと思います。

また派生させたクラスにて○行目を指定するプロパティを用意することで、
○列目の○行目のセルの色を変えるということが可能になると思います。
(プロパティに何も設定しなければオーバーライドしたPaintメソッドはただ単に
BaseのPaintメソッドを呼び出すだけ)

以下簡単ではありますが参考までにソースを記載いたします。

派生させたクラス内にて

//色を変更させたい行番号
int iColChangeRowNum = -1; //初期値に0未満を指定

//色を変更させたい行番号をセットするためのプロパティ
public int ColChangeRowNum{
get{return iColChangeRowNum;}
set{iColChangeRowNum = value;}
}

//Paintメソッドのオーバーライド
protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight) {

//引数で受け取った行番号と色変更したい行番号がおなじならセルの背景色を変更
if(rowNum == iColChangeRowNum)
backBrush = new Brush(Color.Black);
  
  //BaseのPaintメソッドを呼び出す.
base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}

コンパイルを通していないのと、VBの経験が無いので、C#での記載となっておりますので、
修正等必要かと思われますが、ご了承ください。

00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-21 15:16
whitecloudさん御回答ありがとうございます。

教えて頂いた方法を試そうと思ったのですが、ColChangeRowNumにrowの値をsetする方法が分かりませんでした。
ColChangeRowNumを呼び出す側のソースを教えて頂きたいと思います。
それと、こちらの方法でrowを指定すれば背景色を変える行を指定する事は出来ると思うのですが、
列の指定はどのように行えば良いのでしょうか?

初心者で初歩的な質問が多くて申し訳ないのですが、教えて頂きたいと思います。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2003-11-22 09:51
こんにちわ。諸農です。

引用:

00_Numberさんの書き込み (2003-11-21 15:16) より:
whitecloudさん御回答ありがとうございます。

教えて頂いた方法を試そうと思ったのですが、ColChangeRowNumにrowの値をsetする方法が分かりませんでした。
ColChangeRowNumを呼び出す側のソースを教えて頂きたいと思います。


「ColChangeRowNum」はプロパティですので「呼び出す」というよりも、
普通にセットすればいいと思います。
GDNJ&C#ですが参考になるかもしれません。
【DataGrid、列の色指定】
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=2833

ではでは(^^)/

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-26 13:11
Jubeiさんご回答どうもありがとうございます。

その後みなさんに教えて頂いた方法で実現する事が出来ました。
どうもありがとうございました。
1

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