C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: DataGridViewの色


(過去ログ 36 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■18291 / inTopicNo.1)  DataGridViewの色
  
□投稿者/ まりこ (1回)-(2008/05/12(Mon) 19:46:10)

分類:[VB.NET/VB2005] 

はじめまして。使用しているのはVB2005です。

DataGridViewで、データをセットした後に、
DataGridView1.Rows(1).DefaultCellStyle.BackColor = Color.LightCoral
のように行単位で色を変えています。
ヘッダをクリックしてソートしても、色を変えた行は変わったままで
いてほしいのですが、色が消えてしまいます。

色を保持したままにするには、どうしたらよいのでしょうか。
引用返信 編集キー/
■18296 / inTopicNo.2)  Re[1]: DataGridViewの色
□投稿者/ 通りすがり (22回)-(2008/05/12(Mon) 22:05:05)
DataGridViewに表示しているデータのソース(何らかのコレクションなんでしょうね、たぶん)のi番目のデータがDataGridViewの何行目に来るかは分からない。
つまり、コレクションのどの要素に対して色を設定したかということが保存されていないのが問題なんですよね。

ヘッダをクリックしてコレクションをソートした時に当該アイテムが何行目にくるかを計算できれば解決できますね。
あとはソートされたタイミングで色を設定しなおしてやればOKじゃないかなぁー。たぶん。
引用返信 編集キー/
■18301 / inTopicNo.3)  Re[1]: DataGridViewの色
□投稿者/ 魔界の仮面弁士 (725回)-(2008/05/12(Mon) 22:54:40)
No18291 (まりこ さん) に返信
> DataGridView1.Rows(1).DefaultCellStyle.BackColor = Color.LightCoral
> のように行単位で色を変えています。

データ内容に関係なく、常に 2 行目の色を変えるという意味であれば、CellFormatting イベントで
 If e.RowIndex = 1 Then
  e.CellStyle.BackColor = Color.LightCoral
 End If
とでも書いておけば済むかと。

あるいは、隔行単位で色を変えるような状況であれば、AlternatingRowsDefaultCellStyle が使えます。
引用返信 編集キー/
■18324 / inTopicNo.4)  Re[2]: DataGridViewの色
□投稿者/ まりこ (2回)-(2008/05/13(Tue) 11:43:04)
通りすがりさん、魔界の仮面弁士さん、ありがとうございます。

説明不足で申し訳ありません。
やりたいことは、以下のような内容です。
・一覧には列A、列B、列Cがある。
・列AにはDBに登録されている連番がセットされる。
・列BにはYES/NOのどちらかがセットされる。
・列Cには氏名がセットされる。
・初期表示では、列Aをキーとしてソートされている。
・列Bの値がYESの場合は、行の背景色をピンクにする。

例えば、最初は1行目に表示されていた、
列A=1、列B=YESのデータが(背景色=ピンク)、
列Cでソートされて、上から3番目に移動したとしても
3行目の背景色をピンクにしたいのです。

やはりソートされた後最設定する方法になるのでしょうか。
その方法でやってみたいと思います。
引用返信 編集キー/
■18325 / inTopicNo.5)  Re[3]: DataGridViewの色
□投稿者/ 魔界の仮面弁士 (726回)-(2008/05/13(Tue) 12:04:38)
No18324 (まりこ さん) に返信
> ・列Bの値がYESの場合は、行の背景色をピンクにする。

(案1) CellFormatting イベントで 列B の内容をチェックして、e.CellStyle.BackColor を割り当てる。
(案2) RowPrePaint イベントで 列B の内容をチェックして、e.Graphics で塗りつぶす。
(案3) Sorted イベントで、列B の内容をチェックして、.Rows(n).DefaultCellStyle に割り当てる。


> やはりソートされた後最設定する方法になるのでしょうか。
> その方法でやってみたいと思います。
案3 で実装する場合、それぞれのピンク行で、セルスタイルは一緒になるでしょうから、
ピンク背景の DataGridViewCellStyle をあらかじめ用意しておき、その同一のインスタンスを
列B=YESな行すべてで使いまわすようにしておいてください。

ただ、案3 で実装する場合、列B の YES/NO が変更された場合に対応できませんので、
編集後に再割り当てするコードも必要になってくる事に注意してくださいね。
引用返信 編集キー/
■18328 / inTopicNo.6)  Re[4]: DataGridViewの色
□投稿者/ まりこ (3回)-(2008/05/13(Tue) 12:30:19)
魔界の仮面弁士さん

(案1)で試したところ、思うような結果となりました。
色々な方法を教えていただいて、とても参考になりました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -