- 題名: DataGridViewで、Cellの背景色を変えるには?
- 日時: 2008/07/08 16:12:50
- ID: 22403
- この記事の返信元:
- (なし)
- この記事への返信:
- [22405] Re[1]: DataGridViewで、Cellの背景色を変えるには?2008/07/09 4:05:16
- [22407] Re[1]: DataGridViewで、Cellの背景色を変えるには?2008/07/09 13:25:23
- ツリーを表示
■No22403に返信(末さんの記事) > CellのBackColorがデフォルトの白のままです。 既定値は Color.White ではなく、SystemColors.Window だったかと思います。 > // ↓これが効かない。コンストラクタ以外では、色は変わります。 コンストラクタではなく、Load イベント等に移動してください。 コンストラクタの時点では、IsHandleCreated プロパティはまだ false の状態であるため、データバインド系の処理が、うまく連動 しない事があります。(スクロールバーが表示されなかったり) ちなみに、フォームに直接貼るのでなく、TabControl などを利用している 場合も注意が必要です。タブページは、最初に表示されるまでコントロールが 生成されない仕様になっているため、タブを一度もクリックしていない状態で、 その上にあるコントロールにデータバインドすると、期待動作しません。 こちらの問題については、Form_Load などで tabPage2.Visible = true; // Show メソッドでも良いかも。 などと書いておく事で対応できます。蛇足までに。 > dataGridView2[ 1, 1 ].Style.BackColor = Color.Aqua; セルのスタイルを個別変更する方法の場合、ソート等が行われた場合に 元の色にリセットされてしまいます。ソートされた場合などにも 対応させるのであれば、CellFormatting イベントを用いて if (e.Valueやe.RowIndex による判定) { e.CellStyle.BackColor = Color.Aqua; } などとした方が良いかも知れません。 もし、セルのスタイルを個別変更する方法を採用する場合、 * それぞれのセルに、.Style.BackColor を個別に設定するのではなく、 事前に用意しておいた共通のスタイルを .Style に割り当てる。 * スタイルは親要素(行や列など)から継承される物なので、 セルの Style プロパティを得る前に、HasStyle プロパティ や InheritedStyle プロパティを併用して、余計なセル設定を 増やさないようにする。 などといった点にも気を配っておくと良いかも知れません。 [Windows フォーム DataGridView コントロールを拡張するための推奨される手順] http://msdn.microsoft.com/ja-jp/library/ha5xt0d9%28VS.80%29.aspx
分類:[.NET]
お世話になります。
DataGridViewのDataSourceに、DataTable(A) を設定した後、そのAの内容によって
特定CellのBackColorを変更するプログラミングをしております。
あるFromのコンストラクタで、下記一連のコードを実行すると
DataGirdViewにデータのリスト(Aの内容)は表示されるのですが
CellのBackColorがデフォルトの白のままです。
試しに、DataGridView の DataGridViewColumn(C) の DefaultCellStyle の
BackColorを変えて実行したところ、C列のBackColorは変わりました。
優先順位でいうと、Cell のスタイルが最も高いはずですが、コンストラクタでは
変更されないのは、何故なのでしょうか。(何か勘違いをしているのでしょうか)
コンストラクタ以外では、Cell の色は希望通りに変更されます。
対応策を教えて頂ければ幸いです。
宜しく御願い致します。
// コンストラクタ
public Form1( ) {
DataTable dtA = new DataTable( );
dtA.Columns.Add( "Test1", typeof( string ) ) ;
dtA.Columns.Add( "Test2", typeof( string ) ) ;
dtA.Columns.Add( "Test3", typeof( string ) ) ;
dtA.Rows.Add( new object[]{ "001","Name1","1" } );
dtA.Rows.Add( new object[]{ "002","Name2","2" } );
dtA.Rows.Add( new object[]{ "003","Name3","3" } );
DataGridViewTextBoxColumn clm1 = new DataGridViewTextBoxColumn( );
DataGridViewTextBoxColumn clm2 = new DataGridViewTextBoxColumn( );
DataGridViewTextBoxColumn clm3 = new DataGridViewTextBoxColumn( );
clm1.DataPropertyName = "Test1";
clm2.DataPropertyName = "Test2";
clm3.DataPropertyName = "Test3";
// ↓対象のDataGridView
this.dataGridView2.Columns.Clear( );
this.dataGridView2.Columns.Add( clm1 );
this.dataGridView2.Columns.Add( clm2 );
this.dataGridView2.Columns.Add( clm3 );
this.dataGridView2.DataSource = dt2;
// ↓これが効かない。コンストラクタ以外では、色は変わります。
dataGridView2[ 1, 1 ].Style.BackColor = Color.Aqua;
}