質問: ### 前提・実現したいこと C# WindowsアプリケーションでDataGridViewの1行目に合計行を作り合計行の セル背景色を変更する処理を作っています。 DataGridViewはタブコントロール内の2つのタブそれぞれに存在します。 データ検索時にそれぞれのタブ内にあるDataGridViewにDatasourceに別々のデータを バインドし、最後に先頭行(合計行)の背景色を変更する処理にしています。 ### 問題点 アクティブなタブ内のDataGridViewの合計行の背景色は変更されるのですが、 アクティブではないタブ内のDataGridViewの合計行の背景色が変更されません。 ### 試したこと タブのSelectedIndexChangedイベント発生時にアクティブになるタブ内のDataGridViewの 合計行の背景色を変更したらうまくいきました。 (なるべくなら検索時に見た目の処理も行いたいです)
回答: 下記ソースにて仰っているであろう現象が再現しました。 ただ、何故このような現象が発生するかという部分に関しては追いきれていませんが実際に表示が行われるタイミングでスタイルがリセットされているように感じます。 下記ではSelectedIndexChangedイベントにてセルのスタイルを再設定して表示は正常になっています。 また、DataGridViewのRowPrePaintにて0行目の描画の場合はスタイル再設定を行うようにしても現象を抑えることができました。 ``` public partial class Form1 : Form { TabControl tabControl1 = new TabControl() { Dock = DockStyle.Fill }; TabPage tabPage1 = new TabPage() { Name = "page1", Text = "Page1" }; TabPage tabPage2 = new TabPage() { Name = "page2", Text = "Page2" }; DataGridView dataGridView1 = new DataGridView() { Dock = DockStyle.Fill }; DataGridView dataGridView2 = new DataGridView() { Dock = DockStyle.Fill }; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.Controls.Add(tabControl1); tabControl1.Controls.Add(tabPage1); tabControl1.Controls.Add(tabPage2); tabPage1.Controls.Add(dataGridView1); tabPage2.Controls.Add(dataGridView2); DataTable dt = new DataTable(); dt.Columns.Add("Column1"); dt.Columns.Add("Column2"); dt.Columns.Add("Column3"); dt.Rows.Add("total", "total", "total"); dt.Rows.Add("aaa", "aaaa", "aaaaa"); dt.Rows.Add("aaa", "aaaa", "aaaaa"); dt.Rows.Add("aaa", "aaaa", "aaaaa"); dataGridView1.DataSource = dt; dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.LightBlue; dataGridView2.DataSource = dt; dataGridView2.Rows[0].DefaultCellStyle.BackColor = Color.LightBlue; // この時点では背景色はLightBlueだが、タブを切り替えるとSystemColor.Windowとなる。 Console.WriteLine($"dataGridView2[0,0] = {dataGridView2[0, 0].InheritedStyle.BackColor}"); tabControl1.SelectedIndexChanged += (s, ev) => { if (tabControl1.SelectedIndex == 1) { // この時点でSystemColor.Window Console.WriteLine($"dataGridView2[0,0] = {dataGridView2[0, 0].InheritedStyle.BackColor}"); dataGridView2.Rows[0].DefaultCellStyle.BackColor = Color.LightBlue; Console.WriteLine($"dataGridView2[0,0] = {dataGridView2[0, 0].InheritedStyle.BackColor}"); } }; } } ```