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

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

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

Re[5]: DataGridViewのセル色設定


(過去ログ 144 を表示中)

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

■84579 / inTopicNo.1)  DataGridViewのセル色設定
  
□投稿者/ DOMDOM (1回)-(2017/07/18(Tue) 19:36:24)

分類:[VB.NET/VB2005 以降] 

2017/07/18(Tue) 19:38:56 編集(投稿者)

VB2013で作成したWindowsFormアプリで、
DataGridViewのDataSourceにDataTableをバインドして
グリッド表示を行っておりまして、
行の状態により指定列のセルの色を変えています。

現在、グリッドの全行に対してループを行い、
1行ずつ状態を確認しながら対象列のセルの色設定を行っていますが、
ソートを行うと、セルの色設定が消えてしまい、
また色設定を行わないといけません。

やり方がマズイのかも知れませんが、
1000行程度になると、上記方法でのセル色設定には時間がかかるので、
ソートのたびにこの時間がかかるのは問題だと思っています。

このような場合は、データバインドではなく、
DataGridViewのRows.Add(行データ配列)のように、
直接データをグリッドにセットした方がよいのでしょうか?
それとも、何か良い方法があるのでしょうか?

引用返信 編集キー/
■84580 / inTopicNo.2)  Re[1]: DataGridViewのセル色設定
□投稿者/ Hongliang (554回)-(2017/07/18(Tue) 19:54:16)
背景色を変更する程度なら、直接DataGridViewRowやDataGridViewCellにアクセスするのでは無く、
CellFormattingイベントを使ってスタイルを変更するようにします。
http://dobon.net/vb/dotnet/datagridview/cellformatting.html
引用返信 編集キー/
■84589 / inTopicNo.3)  Re[2]: DataGridViewのセル色設定
□投稿者/ DOMDOM (2回)-(2017/07/20(Thu) 09:51:51)
DOMDOMです。
アドバイスありがとうございます。
教えて頂いた方法を試してみます。
すぐには確認できないため、お時間を頂きますが、
改めて結果を報告します。

引用返信 編集キー/
■84618 / inTopicNo.4)  Re[3]: DataGridViewのセル色設定
□投稿者/ DOMDOM (3回)-(2017/07/21(Fri) 17:50:08)
Hongliang 様、教えて頂いたサイトのやり方で、
対象セルの色表示がうまくいきました。
ありがとうございました。

ところで、教えて頂いたサイトでは、
DataGridView1_CellFormattingイベントにあった、

e.CellStyle.BackColor = 指定色

をそのまま真似してみましたが、
この色情報はどこに格納されているのでしょうか?

例えば、そのセルのクリックイベントで、そのセルに設定した色を取得したいのですが、
DataGridView1(列インデックス, 行インデックス).Style.BackColor には
その色は設定されていませんでした。
引用返信 編集キー/
■84619 / inTopicNo.5)  Re[4]: DataGridViewのセル色設定
□投稿者/ Hongliang (555回)-(2017/07/21(Fri) 18:55:28)
描画に使ったらそのまま破棄されます。
CellFormattingイベントの外で必要なら、CellFormattingイベントで目的色を求めたのと同じ方法で、改めて目的色を求めてください。
引用返信 編集キー/
■84620 / inTopicNo.6)  Re[4]: DataGridViewのセル色設定
□投稿者/ 魔界の仮面弁士 (1353回)-(2017/07/21(Fri) 19:15:57)
No84618 (DOMDOM さん) に返信
> この色情報はどこに格納されているのでしょうか?

セルスタイルを設定する箇所は複数あり、
それぞれは継承関係にありますが、優先度順に並べると
 DataGridViewCell.Style
 DataGridViewRow.DefaultCellStyle
 DataGridView.AlternatingRowsDefaultCellStyle
 DataGridView.RowsDefaultCellStyle
 DataGridViewColumn.DefaultCellStyle
 DataGridView.DefaultCellStyle
となっています。
最終的に適用されたスタイルは、InheritedStyle から得られます。


しかしながら、CellFormatting、CellPainting イベントの
e.CellStyle に動的に割り当てたスタイルというのは、
その描画の瞬間に使われるだけであり、
永続的に保持されているわけではありません。

また、e.CellStyle で設定されたスタイルは、
元の InheritedStyle の設定よりも優先されます。



もしもデータに応じて色を決めているようであれば
(負数なら赤文字、正数なら黒文字、非数値なら黄背景など)
DataGridViewのセル.Value などでデータを取り出してから
再判断するということができるでしょう。

あるいは、DataTable 上に非表示列を用意して、
そこにスタイル情報を入れておき
 DirectCast(DataGridViewの行.DataBoundItem, DataRowView).Row(列名)
などで取り出すという手も使えます。
引用返信 編集キー/
■84621 / inTopicNo.7)  Re[5]: DataGridViewのセル色設定
□投稿者/ DOMDOM (4回)-(2017/07/22(Sat) 13:04:19)
Hongliang 様、魔界の仮面弁士様、
ご回答ありがとうございます。
なるほど。DataGridView1_CellFormattingイベントのe.CellStyle.BackColorは、
リアル描画時に使われ、描画が終わったらその色情報はなくなる、ということなのですね。

そのセルに設定した色を取得する場合は、
DataGridView1_CellFormattingイベント内の色設定ロジックを
メソッド化し、これを共通で使うことでうまくいきました。

ありがとうございました。
心より御礼申し上げます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -