.NET TIPS

DataGridコントロールで入力中のセルをハイライト表示するには?

デジタルアドバンテージ
2004/01/30

 DataGridコントロールの入力中のセルは、デフォルトでは、ほかの入力中でないセルと同じように白色となっているため、あまり目立たない(なお、このセルの背景色は、正しくは白色ではなく、「ウィンドウ色」である。この「ウィンドウ色」は、コントロール・パネルの[画面]プロパティの[デザイン]タブにある[詳細設定]で変更できる。この設定内容によっては必ずしも白色ではない場合もあるので注意していただきたい)。入力中のセルだけに背景色を設定して、ハイライト表示すれば、セルをより目立たせて見やすくすることができる。

入力セルをハイライト表示したDataGridコントロール
この画面の例では、入力中のセルが黄色にハイライト表示(背景色が黄色に設定)されている。

 これを行うには、まずDataGridTableStyleクラス(System.Windows.Forms名前空間)のオブジェクトのSelectionBackColorプロパティ(選択されてるセルの背景色の属性)に、Color構造体(System.Drawing名前空間)の値により色を指定する。

 なお、このようにセルの背景色を設定した場合、テキストの色も背景色に合う色(対比色など)に変更した方がよいだろう。例えば、黄色の背景色を使った場合、テキストの色が白色ではかえって見にくいと思われるので、黒や青などの色にするとよいだろう。これを行う場合も、DataGridTableStyleオブジェクトのSelectionForeColorプロパティ(選択セルのテキストの色の属性)にColor構造体の値を指定すればよい。

 次に、このDataGridTableStyleオブジェクトを、DataGridコントロールのテーブル・スタイルのコレクションであるTableStylesプロパティにAddメソッドにより追加し、DataGridコントロールにテーブル・スタイルを適用する。

 ただし、これだけではDataGridコントロールの各セルの中にある「テキスト入力コントロール」の背景色は設定できない。なぜなら、データを入力中のセルにはDataGridコントロールのセルがそのまま表示されているのではなく、実はTextBoxコントロールが表示されているためだ。よって、このTextBoxコントロールにも背景色を設定する必要がある。

 これには、まずDataGridTextBoxColumnクラス(System.Windows.Forms名前空間)のオブジェクトから参照できるTextBoxコントロールのBackColorプロパティ(TextBoxコントロールの背景色の属性)に、Color構造体(System.Drawing名前空間)の値を指定する。テキストの色も併せて設定するには、TextBoxコントロールのForeColorプロパティ(TextBoxコントロールのテキストの色の属性)にColor構造体の値を設定する。

 次に、このDataGridTextBoxColumnオブジェクトを、先ほどのDataGridTableStyleオブジェクトの列スタイルのコレクションであるGridColumnStylesプロパティにAddメソッドにより追加し、テーブル・スタイルに列スタイルを登録する。

 これらのプロパティ設定を行うサンプルのコードを次に示す。なお、このサンプルは「TIPS:DataGridコントロールの入力項目でチェック・ボックスを使用するには?」をベースに改造したものである。

private void Form1_Load(object sender, System.EventArgs e)
{
  // テーブルの列を作成
  DataSet dataSet1 = new DataSet("商品マスター");
  DataTable dataTable1  = dataSet1.Tables.Add("商品テーブル");
  DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int));
  DataColumn dataClumn2 = dataTable1.Columns.Add("商品");
  DataColumn dataClumn3 = dataTable1.Columns.Add("チェック", typeof(bool));

  // テーブルのスタイルを作成
  DataGridTableStyle dgTableStyle = new DataGridTableStyle();
  dgTableStyle.MappingName = dataTable1.TableName;
  // *** 選択セルの背景色と前景色を設定する ***
  dgTableStyle.SelectionBackColor = Color.Yellow;
  dgTableStyle.SelectionForeColor = Color.Black;
  dataGrid1.TableStyles.Add(dgTableStyle);

  // テーブルの列のスタイルを作成
  DataGridTextBoxColumn dgColumnStyle1 = new DataGridTextBoxColumn();
  DataGridTextBoxColumn dgColumnStyle2 = new DataGridTextBoxColumn();
  DataGridBoolColumn    dgColumnStyle3 = new DataGridBoolColumn();
  dgColumnStyle1.MappingName = dataClumn1.ColumnName;
  dgColumnStyle2.MappingName = dataClumn2.ColumnName;
  dgColumnStyle3.MappingName = dataClumn3.ColumnName;
  // ヘッダーにタイトルを設定
  dgColumnStyle1.HeaderText = dataClumn1.ColumnName;
  dgColumnStyle2.HeaderText = dataClumn2.ColumnName;
  dgColumnStyle3.HeaderText = dataClumn3.ColumnName;
  // *** 入力コントロールに背景色と前景色を設定する ***
  dgColumnStyle1.TextBox.BackColor = Color.Yellow;
  dgColumnStyle2.TextBox.BackColor = Color.Yellow;
  dgColumnStyle1.TextBox.ForeColor = Color.Black;
  dgColumnStyle2.TextBox.ForeColor = Color.Black;
  // 列のスタイルをテーブル・スタイルに登録
  dgTableStyle.GridColumnStyles.Add(dgColumnStyle1);
  dgTableStyle.GridColumnStyles.Add(dgColumnStyle2);
  dgTableStyle.GridColumnStyles.Add(dgColumnStyle3);

  // テーブルにデータを追加
  dataTable1.Rows.Add(new Object[] {1, "みかん", true});
  dataTable1.Rows.Add(new Object[] {2, "りんご", false});
  dataTable1.Rows.Add(new Object[] {3, "バナナ", false});
  dataTable1.Rows.Add(new Object[] {4, "すいか", true});
  dataTable1.Rows.Add(new Object[] {5, "いちご", false});
  dataTable1.Rows.Add(new Object[] {6, "メロン", true});

  // データグリッドにテーブルを表示する

  dataGrid1.SetDataBinding(dataSet1, dataTable1.TableName);
}
DataGridコントロールで入力セルをハイライト表示するプログラム
サンプル・プログラム(C#:dgselcell.cs、VB.NET:dgselcell.vb)のダウンロード

 なお、DataGridコントロールにテーブル・スタイルを設定していない場合(つまり、DataGridTableStyleクラスのオブジェクトをテーブル・スタイルとしてDataGridコントロールに追加していない場合)、DataGridコントロールのSelectionBackColorプロパティでセルの背景色を設定できるが、やはり前述したのと同じ理由でテキスト入力コントロールの部分の背景色は設定されないので注意が必要だ。

 ちなみに、DataGridコントロールのSelectionBackColorプロパティの初期値には、Windowsシステムにおける設定色(システム・カラー)を表すSystemColorsクラス(System.Drawing名前空間)のActiveCaptionプロパティ(アクティブなウィンドウのタイトル・バーの背景の色)が設定されている。

 同様に、SelectionForeColorプロパティの初期値も同じSystemColorsクラスのActiveCaptionTextプロパティ(アクティブなウィンドウのタイトル・バーのテキストの色)が設定されている。

 また、TextBoxコントロールのBackColorプロパティの初期値にはSystemColorsクラスのWindowプロパティ(ウィンドウのクライアント領域の背景の色)、TextBoxコントロールのForeColorプロパティの初期値にはWindowTextプロパティ(ウィンドウのクライアント領域のテキストの色)が設定されている。

 これらのシステム・カラーは冒頭で説明したように、コントロール・パネルの[画面]プロパティで変更できる。End of Article

カテゴリ:Windowsフォーム 処理対象:DataGridコントロール
使用ライブラリ:DataGridコントロール
使用ライブラリ:TextBoxコントロール
使用ライブラリ:DataGridTableStyleクラス(System.Windows.Forms名前空間)
使用ライブラリ:DataGridTextBoxColumnクラス(System.Windows.Forms名前空間)
使用ライブラリ:Color構造体(System.Drawing名前空間)
使用ライブラリ:SystemColorsクラス(System.Drawing名前空間)
関連TIPS:TIPS:DataGridコントロールの入力項目でチェック・ボックスを使用するには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]DataGridコントロールの各セルにアクセスするには?
コンソール・アプリケーションで文字色や背景色を変えるには?
Visual Studio 2012のXAMLデザイナで「色名」により色を指定するには?
[ASP.NET]DataGridコントロールでマウスのある行を強調表示するには?
DataGridコントロールで1行おきに色付けするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間