- - PR -
'datagridviewのマイナス値の書式設定
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-06 21:12
datagridviewのマイナス値の書式設定でマイナスは赤い色で表示しているのですが、
列を2つ以上指定したい場合はどのようにすれば、良いでしょうか? よろしくお願い致します。 Private Sub datagridview1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles datagridview1.CellFormatting If datagridview1.Columns(e.ColumnIndex).Name.Equals("列名") Then If CInt(e.Value) < 0 Then e.CellStyle.ForeColor = Color.Red End If End If End Sub | ||||||||||||
|
投稿日時: 2006-02-07 02:14
.NET Framework 2.0 ですね。
列名で判断するのは望ましくないかな。 ColumnIndex 決め打ちで、列挙体を使用した方が良いかもしれません。
0 未満であることの評価なので、キャストする必要はないですね。
本題の質問の回答ですが、これはカレントな列のみですよね。 そんなわけで、Me.DataGridView1([行], [列]).Style.ForeColor = Color.Red などとすれば、他の行や列の Style も変更可能です。 ただ、他の列まで変更する場面が想像できませんが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-08 18:40
お返事ありがとうございます。
>本題の質問の回答ですが、これはカレントな列のみですよね。 すいません。カレントという意味がわかりません。調べましたら「現在作業中の〜」 という意味らしいのですが、解釈が難しそうなので、 状況としましては、フォームにdatagridviewが6個程度あります。 それぞれのdatagridviewに−(マイナス)もある、列が複数あります。 で、それぞれに赤い色で表示させたいです。 >そんなわけで、Me.DataGridView1([行], [列]).Style.ForeColor = Color.Red >などとすれば、他の行や列の Style も変更可能です。 自分なりに考えて作ってみたんですが、処理に時間がかかるのか大変遅いです。 どこが、いけないのでしょうか? 又、datagridviewの場合([列],[行])の順番になるようです。 以下コードです。 Private Sub datagridview1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles datagridview1.CellFormatting Dim a As Integer For a = 0 To datagridview1.Rows.Count - 1 Step 1 If datagridview1(4, a).Value < 0 Then Me.datagridview1(4, a).Style.ForeColor = Color.Red End If Next End Sub >ただ、他の列まで変更する場面が想像できませんが... 例えば、列で 粗利・利益率などがあるとその列の中で、赤字があれば 色を赤に変えたいです。 わかりにくい部分が多数あると思いますが、よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2006-02-08 18:52
書きそびれました、すいません。
一番初め投稿(投稿日時: 2006-02-06 21:12)のコードは↓の所からそのまま引用しました。 目印としては ' Changes how cells are displayed depending on their columns and values. とコメントされているところですのです。 http://msdn2.microsoft.com/ja-jp/library/z1cc356h.aspx | ||||||||||||
|
投稿日時: 2006-02-09 01:25
列は間違いで、現在のイベントを引き起こす元となった Cell ですね。
投稿後に別のサイトで知りました。わかりにくい... orz
まず、数にもよるでしょう。 datagridview1(4, a) が重複している部分があるので、 一度 Cell として別の変数に入れて... もあまり変わらないだろうなぁ... (^-^;) やっぱり単純に数の問題だと思うんですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-09 02:42
初めのコード Aとします
Private Sub datagridview1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles datagridview1.CellFormatting If datagridview1.Columns(e.ColumnIndex).Name.Equals("列名") Then If CInt(e.Value) < 0 Then e.CellStyle.ForeColor = Color.Red End If End If End Sub 自分が考えたコード Bとします。 Private Sub datagridview1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles datagridview1.CellFormatting Dim a As Integer For a = 0 To datagridview1.Rows.Count - 1 Step 1 If datagridview1(4, a).Value < 0 Then Me.datagridview1(4, a).Style.ForeColor = Color.Red End If Next End Sub この2つのコードでは、動作は全く同じ(1個の列の書式設定)なのですが、 コードBは大変遅く(表示までの時間・スクロール時の滑らかさ)、 不便なものです。(フィルタを設定し件数を減らせば速くなります) コードAは滑らかで、動作も軽快ですので、Aの方でいきたいんですが、 ヘルプから引用したので改良の仕方がわかりません。 このコードAに2つ以上の列を設定する事はできますでしょうか? できる場合、コードを教えていただけると大変ありがたいです。 よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2006-02-09 03:00
ん〜……。
前提が把握しきれない。 結局のところ、以下の表があったとして、どのセルの色を変えたいのでしょうか?
| ||||||||||||
|
投稿日時: 2006-02-09 09:39
SuspendLayout メソッドと ResumeLayout メソッドで挟んでも無駄な足掻きかなぁ。 後は先にも書いたように datagridview1(4, a) の時点で Cell として変数に格納する。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |