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

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

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

Re[4]: datagridviewの奇数行の背景色を元に戻すには?


(過去ログ 34 を表示中)

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

■17024 / inTopicNo.1)  datagridviewの奇数行の背景色を元に戻すには?
  
□投稿者/ もねを (30回)-(2008/04/15(Tue) 16:41:05)

分類:[VB.NET/VB2005] 

いつも参考にさせてもらっています。

DataGridViewの奇数行の背景色を元に戻す方法があればアドバイスをお願いいたします。

現在、DataGridViewのAlternatingRowsDefaultCellStyleのBackColorを黄色に設定しています。
初回グリッド表示をすると奇数行は黄色になり偶数行は白色(おそらくSystemColors.Windowと思います)になります。

グリッドの各行には「使用ボタン」があり、ボタンを押すことで押された行の背景色はグレーになります。(使用しない行となります)
グレーになった行で再度使用ボタンを押すとその行の背景色は元に戻り(白色or黄色)ます。(使用する行となります)

奇数行をグレーに変更して、再度、黄色に戻したいのですが戻ることができません。

現在このように書いています。

With dgvMain
  If .Rows(GRID_GYOU).Cells("使用区分").Value = 0 Then
    '行の色は濃いグレー色
    .Rows(GRID_GYOU).DefaultCellStyle.BackColor Color.FromArgb(255, 112, 112, 112)     '濃いグレー色
  Else
    .Rows(GRID_GYOU).DefaultCellStyle.BackColor = System.Drawing.SystemColors.Window
    .AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(255, 255, 128)     '黄色
    .Refresh() '←これはいらないかも
  End If
End With

上のコードでは黄色になってほしいのですが白色になります。
全体を白色にして、奇数行を再度設定としています。

環境はWinXP Home+SP2 + Frameworks2.0 + VB2005Pro です。

よきアドバイスよろしくお願いします。



引用返信 編集キー/
■17033 / inTopicNo.2)  Re[1]: datagridviewの奇数行の背景色を元に戻すには?
□投稿者/ やじゅ (306回)-(2008/04/15(Tue) 19:59:10)
No17024 (もねを さん) に返信
> Else
> .Rows(GRID_GYOU).DefaultCellStyle.BackColor = System.Drawing.SystemColors.Window
> .AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(255, 255, 128) '黄色
> .Refresh() '←これはいらないかも
> End If
> End With
>
> 上のコードでは黄色になってほしいのですが白色になります。
> 全体を白色にして、奇数行を再度設定としています。
>

DataGridViewコントロール−表示カスタマイズの優先度
http://mnow.jp/tabid/179/Default.aspx

AlternatingRowsDefaultCellStyleの方が優先順位が低いので・・・白色になるのかなと。
引用返信 編集キー/
■17037 / inTopicNo.3)  Re[2]: datagridviewの奇数行の背景色を元に戻すには?
□投稿者/ もねを (33回)-(2008/04/15(Tue) 21:41:44)
やじゅさん アドバイスありがとうございます。

DefaultCellStyleにグレー色を設定しているのでやっぱりだめなのでしょうか。
奇数/偶数行を見て、DefaultCellStyleに色を指定すればいくのですが・・・

なにかすっきりとしないのです。簡単にできそうな気がしたのですが。
他に方法がありましたらアドバイスお願いします。

Dim x As Integer = Math.IEEERemainder(GRID_GYOU, 2)
If x = 0 Then
  '行の色は白
  .Rows(GRID_GYOU).DefaultCellStyle.BackColor = Color.White
Else
  '行の色は黄色
  .Rows(GRID_GYOU).DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 128)     '黄色
End If


引用返信 編集キー/
■17062 / inTopicNo.4)  Re[3]: datagridviewの奇数行の背景色を元に戻すには?
□投稿者/ ぽぴ王子 (348回)-(2008/04/16(Wed) 11:27:43)
ぽぴ王子 さんの Web サイト
No17037 (もねを さん) に返信

やじゅさんの示してくださった .Net ユーザーエクスペリエンス研究所(えムナウさんのサイト)から

(優先順位高)
> Rows[m].Cells[n].Style               (プロパティウィンドウからは指定不可)
> Rows[m].DefaultCellStyle             (プロパティウィンドウからは指定不可)
> RowTemplate.DefaultCellStyle
> AlternatingRowsDefaultCellStyle
> RowsDefaultCellStyle
> Columns[n].DefaultCellStyle
> DefaultCellStyle
(優先順位低)

こんな感じになっている、と解説されています。
もねをさんの場合、AlternatingRowsDefaultCellStyle を設定している行に対して
Rows[m].DefaultCellStyle を設定している、という形ですよね。
Rows[m]〜 の方が Alternating〜 よりも優先順位が高いわけで、設定したらその色に
なるのは当然ですと。

で、それを元に戻すにはどうすればいいか、という話ですね。
ここで押さえておきたいのは、Rows[m]〜 を設定したからと言って、Alternating〜
が上書きされているわけではない、ということです。
つまり、元に戻すために Alternating〜 を設定する必要はありません。
逆に言えば、Rows[m]〜 を無効にしてしまえば、その後ろに設定されている Alternating〜
が表示されるはずです。

というわけで

With dgvMain
  If .Rows(GRID_GYOU).Cells("使用区分").Value = 0 Then
    '行の色は濃いグレー色
    .Rows(GRID_GYOU).DefaultCellStyle.BackColor = Color.FromArgb(255, 112, 112, 112)     '濃いグレー色
  Else
    .Rows(GRID_GYOU).DefaultCellStyle = Nothing
  End If
End With

でOK(テストしてません)。

ちなみに

Dim x As Integer = Math.IEEERemainder(GRID_GYOU, 2)

これは GRID_GYOU Mod 2 で求められるはずです。

ところで GRID_GYOU って変数でしょうか。どうも全部大文字だと定数に見えて仕方がないですが。

引用返信 編集キー/
■17097 / inTopicNo.5)  Re[4]: datagridviewの奇数行の背景色を元に戻すには?
□投稿者/ もねを (34回)-(2008/04/16(Wed) 19:29:02)
ぽぴ王子さん ありがとうございます!!!!!

早速試してみました。
感激です。感激しました。

ありがとうございました。

GRID_GYOUは変数なのです。
私も定数のイメージをしてしまいます。

今回の質問は私以外の開発者が作成しているのですが、色を戻す箇所で複雑なことをしており
私、個人的にもっとシンプルで別の方法がきっとあると思いあれやこれやと試していたのですが
どうしても解決法が見つからずアドバイスを頂く運びとなりました。

ありがとうございました!!!!

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -