トップ回答者
DataGridView上の特定のテキストのセルの文字色を変更したい

質問
回答
-
深読みかもしれませんが、DataGridView 上に表示している全データに対して、検索して該当行をハイライトする機能、
要は検索機能を作られたいのかなと思いました(違ってたらごめんなさい)。
1、【特定の文字列を条件式に設定する】方法としては、文字列比較と同じ考え方でできます。
つまり、完全一致(セルの値=検索文字列)、部分一致(セルの値.Contains(検索文字列))、複雑な部分一致(Regex.IsMatch(検索文字列、パターン))という具合です。AccessDeny 様がおっしゃられている正規表現は3番目ですね。
2.DataGridView の CellFormatting イベントを購読すると、セルの調整を行うことが出来るようになります。
【e.Value】には各セルの値が入ってきます。多分ですが、セルに文字列をセットしているので、e.Value には文字列が入ってきていると思います。
Console.WriteLine(e.Value) で中身を確認することが可能です。e.Value 自体は Object 型ですが、中身は String 型なはず。
【e.Value】と1.の組み合わせを、If 文の条件式に書けば、質問者様のやりたいことができそうな気がしました。- 回答としてマーク T.K.Tora 2018年3月16日 17:18
すべての返信
-
一般的には、CellPaintingイベントで自前で描画することになります。
以下が参考になると思います。C# DataGridViewで一つのセル内の特定の文字だけフォントカラーを変える方法について
https://qa.atmarkit.co.jp/q/3851VBからC#への変換は、例えば以下でできます。
Code Translation for .NET (C#<->VB.NET<->TypeScript<->Java)
http://www.carlosag.net/Tools/CodeTranslator/★良い回答には質問者は回答済みマークを、閲覧者は投票を!
-
「e.Valueなどを確認して」とはDataGridViewのデータの中からAAAのセルがあるか確認して、あればそのセルの文字色を赤に変えるということだとおもうのですが、よくわかりませんでした。すいません。。。
If セルの値が"AAA”なら Then
'セルの色を青に変える
Me.DGV.Columns(5).DefaultCellStyle.ForeColor = Color.Blue
ElseIf セルの値が"BBB”なら Then
Me.DGV.Columns(5).DefaultCellStyle.ForeColor = Color.Red
Else セルの値が"CCC”なら Then
Me.DGV.Columns(5).DefaultCellStyle.ForeColor = Color.Green
End If
こんな感じで考えているのですが特定の文字列を条件式に設定する方法がわかりません。
-
文字列が完璧に固定されているのでしたら、普通に比較でよいのかと。
https://dobon.net/vb/dotnet/string/stringequals.html
もし、メール アドレスのような形式、郵便番号みたいな形式、と
固定されていないのであれば正規表現をつかえばよいのではないでしょうか。
と、思ったのですが、ご質問の意図を私が受け止められておりますか??
慣れてないとのことでしたので、正規表現はこちらのほうがわかりやすいかもです。
http://www.atmarkit.co.jp/ait/articles/1701/25/news025.html
あと Else には条件は入れれないかと、「それ以外」ですかね。
- 編集済み AccessDeny 2018年3月16日 11:28 追記
-
深読みかもしれませんが、DataGridView 上に表示している全データに対して、検索して該当行をハイライトする機能、
要は検索機能を作られたいのかなと思いました(違ってたらごめんなさい)。
1、【特定の文字列を条件式に設定する】方法としては、文字列比較と同じ考え方でできます。
つまり、完全一致(セルの値=検索文字列)、部分一致(セルの値.Contains(検索文字列))、複雑な部分一致(Regex.IsMatch(検索文字列、パターン))という具合です。AccessDeny 様がおっしゃられている正規表現は3番目ですね。
2.DataGridView の CellFormatting イベントを購読すると、セルの調整を行うことが出来るようになります。
【e.Value】には各セルの値が入ってきます。多分ですが、セルに文字列をセットしているので、e.Value には文字列が入ってきていると思います。
Console.WriteLine(e.Value) で中身を確認することが可能です。e.Value 自体は Object 型ですが、中身は String 型なはず。
【e.Value】と1.の組み合わせを、If 文の条件式に書けば、質問者様のやりたいことができそうな気がしました。- 回答としてマーク T.K.Tora 2018年3月16日 17:18
-
>【e.Value】と1.の組み合わせを、If 文の条件式に書けば、質問者様のやりたいことができそうな気がしました。
下記のコードで思っていた処理ができました!
>今当たってる問題含め、最終的に何をしたいのか、それに対して○○したのだけどだめだった。
などなど、、記載したほうが、とても参考になる返信があると思いますよ~。ありがとうございます。次回からは最終的な目的なども詳しく状況を添えて質問したいと思います。
最終的にはHongliangさんの
>特定セルの文字列全体の色を変えたいという程度(CellStyleの設定で済む程度)でしたら、CellPaintingイベントで自前描画する必要はなく、CellFormattingイベントで、e.Valueなどを確認してe.CellStyle.ForeColor = Color.Redするなどで対応できます。
の回答の段階で解決策がすでに出ていましたが15日の段階では勉強不足で回答の意味すらよくわかっていませんでした。(汗
trapemiyaさんの回答のリンク先は私にはまだまだコードがどういう意味なのか理解するのが難しいです。これから理解できるように勉強させていただきます。。
長くなりましたが、3日ほど悩んでいた問題だったのでうまくいってすごく嬉しいです。
trapemiyaさん、Hongliangさん、AccessDenyさん、 sutefu7さん、回答ありがとうございました。
CellPaintingイベント
If e.Value = "AAA" Then
e.CellStyle.ForeColor = Color.Red
ElseIf e.Value = "BBB Then
e.CellStyle.ForeColor = Color.Blue....
End If