DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのStyle反映

環境/言語:[環境:WindowsVista 言語:C# .NET 3.5]
分類:[.NET]

現在、C#でDataGridViewを使ったプログラムを作っています。
こちらの情報は、大変有用で助かってます。

現在、次のような問題が有り、お知恵を拝借できないか・・・と思いまして、質問させて頂きます。m(__)m

いくつかのTabで区切っており、通常は表示していないTabページにあるDataGridViewを、更新されたデータによりBackColorを変える処理をしています。

このDataGridViewが有るTabページを一度、表示させるとちゃんと処理してくれるのですが、表示前だと、BackColorの変更がされないようです。

DataGridViewをUpdate()やRefresh()させたらどうか?と試しましたが、うまく行きません。

仕方ないので、プログラムの起動時に、そのTabページを一瞬表示させて、別のTabページを表示させているのですが、どうもスマートじゃ無いので。

どなたか、対策をご存じの方がいらっしゃいましたら、よろしくお願いします。
■No24785に返信(cdgさんの記事)
> いくつかのTabで区切っており、通常は表示していないTabページにあるDataGridViewを、更新されたデータによりBackColorを変える処理をしています。

それぞれのタブは、最初に表示されるまではコントロールを生成しません。

そのため、データバインドしたデータの割り当てが行われていなかったり、
DataGridView の Style 設定が反映されないといった現象が発生します。

たとえば Load イベントで、tabPage2.Visible = true; などを実行することで
この問題を解決できるかと思います。
(TabPage.Visible は、IntelliSense 上では非表示なプロパティです)


あるいは、イベントを用いる方法もあります。

行番号や列番号、あるいはセル内のデータに依存して色を変えたい場合には、
DataGridView の CellFormatting イベントを利用し、その中で、
e.CellStyle を制御してみてください。この方が融通が利く場合も多いかと。
  • 題名: Re[2]: DataGridViewのStyle反映
  • 著者: cdg
  • 日時: 2009/06/18 22:36:20
  • ID: 24791
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No24789に返信(魔界の仮面弁士さんの記事)
> ■No24785に返信(cdgさんの記事)
>>いくつかのTabで区切っており、通常は表示していないTabページにあるDataGridViewを、更新されたデータによりBackColorを変える処理をしています。
>
> それぞれのタブは、最初に表示されるまではコントロールを生成しません。
>
> そのため、データバインドしたデータの割り当てが行われていなかったり、
> DataGridView の Style 設定が反映されないといった現象が発生します。
>
> たとえば Load イベントで、tabPage2.Visible = true; などを実行することで
> この問題を解決できるかと思います。
> (TabPage.Visible は、IntelliSense 上では非表示なプロパティです)
なるほど♪
原因が判って、一歩前進しました。

教えて頂いたtabPage.Visible = true;ですが、結局、次のように処理しました。

メインフォーム表示処理で・・・

// タブページの表示処理(コントロールの強制作成)
foreach (TabPage tp in tclMain.TabPages)
{
  tp.Show();
}
this.Show();

として、無事、解決です。

TabPage内のコントロールが表示されるまで生成されない・・・ってFAQなんですかね?

ホントに助かりました。m(__)m

> あるいは、イベントを用いる方法もあります。
>
> 行番号や列番号、あるいはセル内のデータに依存して色を変えたい場合には、
> DataGridView の CellFormatting イベントを利用し、その中で、
> e.CellStyle を制御してみてください。この方が融通が利く場合も多いかと。
ありがとうございます。
CellFormattingはメインページで使ってますが、今回のTabPageはそこまで重要で無いので、
dgv[0,0].Style.BackColor = Color.LightBlue;
と指定してます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板