質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

4121閲覧

複数タブ内それぞれにあるDataGridViewの背景色の変更が上手くいかない

tttbbb

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2020/08/11 06:54

前提・実現したいこと

C# WindowsアプリケーションでDataGridViewの1行目に合計行を作り合計行の
セル背景色を変更する処理を作っています。
DataGridViewはタブコントロール内の2つのタブそれぞれに存在します。
データ検索時にそれぞれのタブ内にあるDataGridViewにDatasourceに別々のデータを
バインドし、最後に先頭行(合計行)の背景色を変更する処理にしています。

問題点

アクティブなタブ内のDataGridViewの合計行の背景色は変更されるのですが、
アクティブではないタブ内のDataGridViewの合計行の背景色が変更されません。

試したこと

タブのSelectedIndexChangedイベント発生時にアクティブになるタブ内のDataGridViewの
合計行の背景色を変更したらうまくいきました。
(なるべくなら検索時に見た目の処理も行いたいです)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/08/11 07:01

どのようにして背景色を変更しているのですか?
tttbbb

2020/08/11 23:15 編集

以下のコードで背景色を変更しております。 dgv.Rows[0].DefaultCellStyle.BackColor = Color.LightBlue;
YAmaGNZ

2020/08/12 00:05

それをどのタイミングで行っているのですか?
YAmaGNZ

2020/08/12 00:18

言葉で説明されても行き違いが発生する可能性があるので、再現できるソースの提示をお願いします。
guest

回答2

0

ベストアンサー

下記ソースにて仰っているであろう現象が再現しました。
ただ、何故このような現象が発生するかという部分に関しては追いきれていませんが実際に表示が行われるタイミングでスタイルがリセットされているように感じます。

下記ではSelectedIndexChangedイベントにてセルのスタイルを再設定して表示は正常になっています。
また、DataGridViewのRowPrePaintにて0行目の描画の場合はスタイル再設定を行うようにしても現象を抑えることができました。

C#

1public 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

投稿2020/08/12 01:33

YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2020/08/12 03:20

バグなのか仕様なのかよくわかりませんが^^; DataGridView#DataBindingComplete や DataGridView#CellFormatting で対応している例も見受けられました。
tttbbb

2020/08/12 04:37

YAmaGNZ様 詳細なソース&情報ありがとうございます! 頂いた情報を元にDataGridViewのRowPrePaint等々、色々試してみます。 迅速なご返信ありがとうございました。
tttbbb

2020/08/12 04:39

TN8001様 他の方々も同じように苦労されてるんですね。。。 私の検索では同じ様な方々の情報を見つけられませんでしたが、 頂いたイベントでのやり方も調べて試してみます! ありがとうございました。
guest

0

はずれかもしれませんが、下記でどうでしょうか?
dgv.Invalidate();

投稿2020/08/11 23:44

kikukiku

総合スコア531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問