- PR -

DataGridの特定セルに対して色を変化させる

投稿者投稿内容
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-09-23 22:03
引用:

sakepowerさんの書き込み (2005-09-23 21:35) より:
上記のようなDataGridにデータ(1と2と35)がある場合35のセルのみ前景色がColor.Red
になるのでカラムごとに単一色にならないと思うのですが、



ああ、確かにこの部分はそうですね。疑いようもありません。
//ところでこのcellValueは必ずbyteであることが保証されてるんでしょうか?
ではLabelはどこに消えたんですか?
どう働くんでしょう?

……ん〜、ひょっとして特定の(Labelで指定された)カラムにだけこの派生したMyDataGridTextBoxColumnを適用して、要件を満たすセルの色を変更したいということかしらん?
それならDataGridTextBoxColumnのインスタンスを作るときにLabelで指定されてるかどうか判断して、されているならMyDataGridTextBoxColumnを、そうでないならそのままのDataGridTextBoxColumnをTableStyle.GridColumnStylesにAddしてやればいいんですけど。
コード:
MyDataGridTextBoxColumn cs = new MyDataGridTextBoxColumn(); 


この部分を
コード:
DataGridTextBoxColumn cs;
// IsMatchThisColumnNameは、名前に合致するLabelの値を判断するヘルパメソッド。
// bool値を返すように適当に書いてください
if (IsMatchThisColumnName(MyColumnName))
    cs = new MyDataGridTextBoxColumn();
else
    cs = new DataGridTextBoxColumn();


こんな感じですけどねー。
まあ私の当て推量がはずしてたら目も当てられませんが。
sakepower
会議室デビュー日: 2005/09/11
投稿数: 11
投稿日時: 2005-09-24 00:55
Hongliang 様 返信ありがとうございます。

コード:
--------------------------------------------------------------------------------

DataGridTextBoxColumn cs;
// IsMatchThisColumnNameは、名前に合致するLabelの値を判断するヘルパメソッド。
// bool値を返すように適当に書いてください
if (IsMatchThisColumnName(MyColumnName))
cs = new MyDataGridTextBoxColumn();
else
cs = new DataGridTextBoxColumn();


--------------------------------------------------------------------------------
なんですが、この文だと、
public class MyDataGridTextBoxColumn : DataGridTextBoxColumn 文を
条件:変数(各ColumnラベルTextの値)を上記文に含まれる
if ((byte)cellValue <= 20)
{
  foreBrush = new SolidBrush(Color.Red);
}
の「20」の部分に変数を与えることができず、
public class MyDataGridTextBoxColumn : DataGridTextBoxColumn 文
を各Column名の数だけ作らなくては、ならないような気がいたします。
できれば、
public class MyDataGridTextBoxColumn : DataGridTextBoxColumn 文
を1つの文だけで、変数により条件分岐することはできないでしょうか?



Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-09-24 06:38
ああ、なるほど、ようやっと理解できました。
//うむぅ、これは私の理解力が低かったな……。

そういうことなら私が初めに提案したのが大体使えそうですね。
MyDataGridTextBoxColumnを作るときに条件を与えると言う奴。
MyDataGridTextBoxColumnのコンストラクタにint(なりbyteなり)を取るものを作り、それにLabelから取得した値を渡します。
MyDataGridTextBoxColumnは内部でそれをフィールドにとっておき、Paintメソッド内でそれと現在のセルの値を比較して色を塗り分けます。
Paintイベント内で一々Labelの値を見に行く必要はないでしょう。
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-09-24 08:45
引用:

sakepowerさんの書き込み (2005-09-23 21:35) より:

|Column1| カラム名:Column1 <---フィールド名?
---------
| 1 |
---------
| 2 |
---------
| 35 |
---------



されたいことが今一歩わかっていないのですが、上のColumn1と比較したいということなのでしょうか?
であれば、MyDataGridTextBoxColumnの中でthis.HeaderTextで比較できるはずです。
外れたことを言っていたらごめんなさい。
sakepower
会議室デビュー日: 2005/09/11
投稿数: 11
投稿日時: 2005-09-24 09:40
Hongliang様 trapemiya様 返答ありがとうございます。


引用:
--------------------------------------------------------------------------------

MyDataGridTextBoxColumnを作るときに条件を与えると言う奴。
MyDataGridTextBoxColumnのコンストラクタにint(なりbyteなり)を取るものを作り、それにLabelから取得した値を渡します。
MyDataGridTextBoxColumnは内部でそれをフィールドにとっておき、Paintメソッド内でそれと現在のセルの値を比較して色を塗り分けます。

--------------------------------------------------------------------------------
実際にコード的にどのようなことか、もう少し教えていただけないでしょうか?
宜しくお願いいたします。





[ メッセージ編集済み 編集者: sakepower 編集日時 2005-09-24 13:49 ]
sakepower
会議室デビュー日: 2005/09/11
投稿数: 11
投稿日時: 2005-09-27 14:12
Hongliang様 

遅くなりましたが、

引用:
--------------------------------------------------------------------------------
MyDataGridTextBoxColumnは内部でそれをフィールドにとっておき、Paintメソッド内でそれと現在のセルの値を比較して色を塗り分けます。
--------------------------------------------------------------------------------

が出来るようになり、解決いたしました。

本当にありがとございました。

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