次の方法で共有


Windows フォーム DataGridView コントロールでのセルのスタイル

更新 : 2007 年 11 月

DataGridView コントロール内の各セルは、テキスト形式、背景色、前景色、フォントなど、独自のスタイルを持つことができます。ただし、通常は複数のセルが特定のスタイル特性を共有します。

スタイルを共有するセルのグループとしては、特定の行または列のすべてのセル、特定の値を格納するすべてのセル、またはコントロール内のすべてのセル、などがあります。これらのグループは重複するため、各セルは複数の場所からスタイル情報を取得できます。たとえば、DataGridView コントロールのすべてのセルに同じフォントを使用し、通貨列のセルだけに通貨書式を使用し、負数を持つ通貨セルだけに赤の前景色を使用するように指定することもできます。

DataGridViewCellStyle クラス

DataGridViewCellStyle クラスには、visual スタイルに関連する次のプロパティが含まれます。

また、このクラスには書式設定に関連する次のプロパティも含まれます。

これらのプロパティおよびその他のセル スタイル プロパティの詳細については、DataGridViewCellStyle のリファレンス ドキュメント、および後の「参照」セクションに示したトピックを参照してください。

DataGridViewCellStyle オブジェクトの使用

DataGridViewCellStyle オブジェクトは、DataGridViewDataGridViewColumnDataGridViewRowDataGridViewCell の各クラス、およびその派生クラスのさまざまなプロパティから取得できます。これらのプロパティのいずれかが設定されていない場合、その値を取得すると、新しい DataGridViewCellStyle オブジェクトが作成されます。独自に作成した DataGridViewCellStyle オブジェクトをインスタンス化して、これらのプロパティを割り当てることもできます。

複数の DataGridView 要素間で DataGridViewCellStyle オブジェクトを共有すると、スタイル情報の不要な重複を避けることができます。また、コントロール レベル、列レベル、および行レベルで設定されたスタイルは、各レベルからセル レベルまで、下方向にフィルタ処理されるため、上位のレベルとは異なるスタイル プロパティだけを各レベルで設定することによってスタイルの重複を避けることもできます。これについては、後の「スタイルの継承」セクションで詳しく説明します。

DataGridViewCellStyle オブジェクトを取得または設定する主要なプロパティを次の表に示します。

プロパティ

クラス

説明

DefaultCellStyle

DataGridViewDataGridViewColumnDataGridViewRow、および派生クラス

コントロール全体 (ヘッダー セルを含む)、列、または行内のすべてのセルが使用する既定のスタイルを取得または設定します。

RowsDefaultCellStyle

DataGridView

コントロール内のすべての行が使用する既定のセル スタイルを取得または設定します。ヘッダー セルは含まれません。

AlternatingRowsDefaultCellStyle

DataGridView

コントロール内の交互の行が使用する既定のセル スタイルを取得または設定します。帳簿のような効果を出すために使用します。

RowHeadersDefaultCellStyle

DataGridView

コントロールの行ヘッダーが使用する既定のセル スタイルを取得または設定します。visual スタイルが有効な場合は、現在のテーマでオーバーライドされます。

ColumnHeadersDefaultCellStyle

DataGridView

コントロールの列ヘッダーが使用する既定のセル スタイルを取得または設定します。visual スタイルが有効な場合は、現在のテーマでオーバーライドされます。

Style

DataGridViewCell と派生クラス

セル レベルで指定されたスタイルを取得または設定します。このスタイルは、上位レベルから継承したスタイルをオーバーライドします。

InheritedStyle

DataGridViewCellDataGridViewRowDataGridViewColumn、および派生クラス

セル、行、または列に現在適用されているすべてのスタイルを取得します。上位レベルから継承したスタイルを含みます。

前述のように、スタイル プロパティがまだ設定されていない場合にスタイル プロパティの値を取得すると、新しい DataGridViewCellStyle オブジェクトのインスタンスが自動的に生成されます。不要なオブジェクトが作成されないようにするため、行クラスや列クラスには、DefaultCellStyle プロパティが設定されているかどうかを確認するためにチェックできる HasDefaultCellStyle プロパティが用意されています。同様に、セル クラスには、Style プロパティが設定されているかどうかを示す HasStyle プロパティがあります。

各スタイル プロパティには、対応する DataGridView コントロールの PropertyNameChanged イベントがあります。行、列、およびセルのプロパティの場合、イベント名は "Row"、"Column"、または "Cell" で始まります (たとえば、RowDefaultCellStyleChanged)。これらの各イベントは、対応するスタイル プロパティが異なる DataGridViewCellStyle オブジェクトに設定されているときに発生します。これらのイベントは、スタイル プロパティから DataGridViewCellStyle オブジェクトを取得してプロパティ値を変更したときには発生しません。セル スタイル オブジェクト自体に対する変更に対応するには、CellStyleContentChanged イベントを処理します。

スタイルの継承

DataGridViewCell は、その InheritedStyle プロパティから外観を取得します。このプロパティが返す DataGridViewCellStyle オブジェクトは、DataGridViewCellStyle 型のプロパティの階層構造から値を継承します。これらのプロパティを以下に示します。ヘッダー セル以外のセルの InheritedStyle が値を取得する順に記載します。

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (奇数のインデックス番号を持つ行のセルのみ)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

行および列のヘッダー セルの場合、InheritedStyle プロパティには、指定した順序で、以下に示すソース プロパティの値が設定されます。

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle またはDataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

このプロセスを説明する図を次に示します。

DataGridViewCellStyle 型のプロパティ

特定の行および列が継承したスタイルにアクセスすることもできます。列の InheritedStyle プロパティは、次のプロパティから値を継承します。

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

行の InheritedStyle プロパティは、次のプロパティから値を継承します。

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (奇数のインデックス番号を持つ行のセルのみ)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

InheritedStyle プロパティが返す DataGridViewCellStyle オブジェクトの各プロパティの場合、プロパティ値は、DataGridViewCellStyle クラスの既定値以外の値に、対応するプロパティが設定された適切なリストの最初のセル スタイルから取得されます。

例のセルの ForeColor プロパティ値が、そのセルを含む列から継承されるしくみを次の表に示します。

DataGridViewCellStyle 型のプロパティ

取得されるオブジェクトの ForeColor 値の例

DataGridViewCell.Style

Color.Empty

DataGridViewRow.DefaultCellStyle

Color.Red

DataGridView.AlternatingRowsDefaultCellStyle

Color.Empty

DataGridView.RowsDefaultCellStyle

Color.Empty

DataGridViewColumn.DefaultCellStyle

Color.DarkBlue

DataGridView.DefaultCellStyle

Color.Black

この場合、セルの行の Color.Red 値はリストの最初の値 (実際の値) です。この値が、セルの InheritedStyleForeColor プロパティ値になります。

さまざまな DataGridViewCellStyle プロパティがさまざまな場所から値を継承できるしくみを次の図に示します。

DataGridView プロパティ - 値の継承

スタイルの継承を利用することにより、同じ情報を複数の場所で指定せずに、コントロール全体に適切なスタイルを指定できます。

ヘッダー セルは前述のとおりにスタイルを継承しますが、DataGridView コントロールの ColumnHeadersDefaultCellStyle プロパティおよび RowHeadersDefaultCellStyle プロパティが返すオブジェクトは、DefaultCellStyle プロパティが返すオブジェクトのプロパティ値をオーバーライドする初期プロパティ値を持ちます。DefaultCellStyle プロパティが返すオブジェクトに設定されたプロパティを行ヘッダーと列ヘッダーに適用するときは、ColumnHeadersDefaultCellStyle プロパティと RowHeadersDefaultCellStyle プロパティが返すオブジェクトの対応するプロパティを、DataGridViewCellStyle クラスに対して示された既定値に設定する必要があります。

メモ :

visual スタイルを有効にすると、行ヘッダーと列ヘッダー (TopLeftHeaderCell を除く) のスタイルは現在のテーマによって自動的に設定され、これらのプロパティで指定したすべてのスタイルはオーバーライドされます。

また、DataGridViewButtonColumn 型、DataGridViewImageColumn 型、および DataGridViewCheckBoxColumn 型も、列の DefaultCellStyle プロパティが返すオブジェクトのいくつかの値を初期化します。詳細については、各型のリファレンス ドキュメントを参照してください。

動的なスタイル設定

特定の値でセルのスタイルをカスタマイズするには、DataGridView.CellFormatting イベントのハンドラを実装します。このイベントのハンドラは、DataGridViewCellFormattingEventArgs 型の引数を受け取ります。このオブジェクトに含まれるプロパティを使用して、書式を設定するセルの値と DataGridView コントロールにおけるセルの場所を決定します。また、このオブジェクトには CellStyle プロパティも含まれます。このプロパティは、書式を設定するセルの InheritedStyle プロパティの値に初期化されます。このセル スタイル プロパティを変更して、セルの値と場所に適したスタイル情報を指定できます。

メモ :

RowPrePaint イベントと RowPostPaint イベントもイベント データの DataGridViewCellStyle オブジェクトを受け取りますが、その場合、オプジェクトは読み取り専用の行の InheritedStyle プロパティのコピーです。変更しても、コントロールには反映されません。

DataGridView.CellMouseEnterCellMouseLeave などのイベントに応答して、個々のセルのスタイルを動的に変更することもできます。たとえば、CellMouseEnter イベントのハンドラ内に (セルの Style プロパティから取得した) セルの背景色の現在値を格納し、セル上にマウスが配置されたときにセルを強調表示する新しい色を設定できます。その後、CellMouseLeave イベントのハンドラ内で背景色を元の色に戻すことができます。

メモ :

特定のスタイル値が設定されているかどうかにかかわらず、セルの Style プロパティに格納された値をキャッシュすることは重要です。スタイル設定を一時的に置き換えた場合、元の "設定なし" の状態に戻すことによって、セルのスタイル設定を再度上位レベルから継承できます。スタイルが継承されているかどうかにかかわらず、セルに対して有効になっている実際のスタイルを確認する必要があるときは、セルの InheritedStyle プロパティを使用します。

参照

処理手順

方法 : Windows フォーム DataGridView コントロールの既定のセル スタイルを設定する

概念

Windows フォーム DataGridView コントロールでのデータの書式設定

参照

DataGridView

DataGridViewCellStyle

DataGridView.AlternatingRowsDefaultCellStyle

DataGridView.ColumnHeadersDefaultCellStyle

DataGridView.DefaultCellStyle

DataGridView.RowHeadersDefaultCellStyle

DataGridView.RowsDefaultCellStyle

DataGridViewBand.InheritedStyle

DataGridViewRow.InheritedStyle

DataGridViewColumn.InheritedStyle

DataGridViewBand.DefaultCellStyle

DataGridViewCell.InheritedStyle

DataGridViewCell.Style

DataGridView.CellFormatting

DataGridView.CellStyleContentChanged

DataGridView.RowPrePaint

DataGridView.RowPostPaint

その他の技術情報

Windows フォームの DataGridView コントロールの基本的な書式設定およびスタイル設定