下記ソースにて仰っているであろう現象が再現しました。
ただ、何故このような現象が発生するかという部分に関しては追いきれていませんが実際に表示が行われるタイミングでスタイルがリセットされているように感じます。
下記ではSelectedIndexChangedイベントにてセルのスタイルを再設定して表示は正常になっています。
また、DataGridViewのRowPrePaintにて0行目の描画の場合はスタイル再設定を行うようにしても現象を抑えることができました。
C#
1 public partial class Form1 : Form
2 {
3 TabControl tabControl1 = new TabControl ( ) { Dock = DockStyle . Fill } ;
4 TabPage tabPage1 = new TabPage ( ) { Name = "page1" , Text = "Page1" } ;
5 TabPage tabPage2 = new TabPage ( ) { Name = "page2" , Text = "Page2" } ;
6 DataGridView dataGridView1 = new DataGridView ( ) { Dock = DockStyle . Fill } ;
7 DataGridView dataGridView2 = new DataGridView ( ) { Dock = DockStyle . Fill } ;
8
9 public Form1 ( )
10 {
11 InitializeComponent ( ) ;
12 }
13
14 private void Form1_Load ( object sender , EventArgs e )
15 {
16
17 this . Controls . Add ( tabControl1 ) ;
18
19 tabControl1 . Controls . Add ( tabPage1 ) ;
20 tabControl1 . Controls . Add ( tabPage2 ) ;
21
22 tabPage1 . Controls . Add ( dataGridView1 ) ;
23 tabPage2 . Controls . Add ( dataGridView2 ) ;
24
25 DataTable dt = new DataTable ( ) ;
26 dt . Columns . Add ( "Column1" ) ;
27 dt . Columns . Add ( "Column2" ) ;
28 dt . Columns . Add ( "Column3" ) ;
29
30 dt . Rows . Add ( "total" , "total" , "total" ) ;
31 dt . Rows . Add ( "aaa" , "aaaa" , "aaaaa" ) ;
32 dt . Rows . Add ( "aaa" , "aaaa" , "aaaaa" ) ;
33 dt . Rows . Add ( "aaa" , "aaaa" , "aaaaa" ) ;
34
35 dataGridView1 . DataSource = dt ;
36 dataGridView1 . Rows [ 0 ] . DefaultCellStyle . BackColor = Color . LightBlue ;
37
38 dataGridView2 . DataSource = dt ;
39 dataGridView2 . Rows [ 0 ] . DefaultCellStyle . BackColor = Color . LightBlue ;
40
41 // この時点では背景色はLightBlueだが、タブを切り替えるとSystemColor.Windowとなる。
42 Console . WriteLine ( $ "dataGridView2[0,0] = {dataGridView2[0, 0].InheritedStyle.BackColor}" ) ;
43
44
45 tabControl1 . SelectedIndexChanged += ( s , ev ) = > {
46 if ( tabControl1 . SelectedIndex == 1 )
47 {
48 // この時点でSystemColor.Window
49 Console . WriteLine ( $ "dataGridView2[0,0] = {dataGridView2[0, 0].InheritedStyle.BackColor}" ) ;
50 dataGridView2 . Rows [ 0 ] . DefaultCellStyle . BackColor = Color . LightBlue ;
51 Console . WriteLine ( $ "dataGridView2[0,0] = {dataGridView2[0, 0].InheritedStyle.BackColor}" ) ;
52 }
53 } ;
54
55 }
56
57 }
58