Windows フォーム DataGridView コントロールでのセルのスタイル
更新 : 2007 年 11 月
DataGridView コントロール内の各セルは、テキスト形式、背景色、前景色、フォントなど、独自のスタイルを持つことができます。ただし、通常は複数のセルが特定のスタイル特性を共有します。
スタイルを共有するセルのグループとしては、特定の行または列のすべてのセル、特定の値を格納するすべてのセル、またはコントロール内のすべてのセル、などがあります。これらのグループは重複するため、各セルは複数の場所からスタイル情報を取得できます。たとえば、DataGridView コントロールのすべてのセルに同じフォントを使用し、通貨列のセルだけに通貨書式を使用し、負数を持つ通貨セルだけに赤の前景色を使用するように指定することもできます。
DataGridViewCellStyle クラス
DataGridViewCellStyle クラスには、visual スタイルに関連する次のプロパティが含まれます。
また、このクラスには書式設定に関連する次のプロパティも含まれます。
これらのプロパティおよびその他のセル スタイル プロパティの詳細については、DataGridViewCellStyle のリファレンス ドキュメント、および後の「参照」セクションに示したトピックを参照してください。
DataGridViewCellStyle オブジェクトの使用
DataGridViewCellStyle オブジェクトは、DataGridView、DataGridViewColumn、DataGridViewRow、DataGridViewCell の各クラス、およびその派生クラスのさまざまなプロパティから取得できます。これらのプロパティのいずれかが設定されていない場合、その値を取得すると、新しい DataGridViewCellStyle オブジェクトが作成されます。独自に作成した DataGridViewCellStyle オブジェクトをインスタンス化して、これらのプロパティを割り当てることもできます。
複数の DataGridView 要素間で DataGridViewCellStyle オブジェクトを共有すると、スタイル情報の不要な重複を避けることができます。また、コントロール レベル、列レベル、および行レベルで設定されたスタイルは、各レベルからセル レベルまで、下方向にフィルタ処理されるため、上位のレベルとは異なるスタイル プロパティだけを各レベルで設定することによってスタイルの重複を避けることもできます。これについては、後の「スタイルの継承」セクションで詳しく説明します。
DataGridViewCellStyle オブジェクトを取得または設定する主要なプロパティを次の表に示します。
プロパティ |
クラス |
説明 |
---|---|---|
DefaultCellStyle |
コントロール全体 (ヘッダー セルを含む)、列、または行内のすべてのセルが使用する既定のスタイルを取得または設定します。 |
|
コントロール内のすべての行が使用する既定のセル スタイルを取得または設定します。ヘッダー セルは含まれません。 |
||
コントロール内の交互の行が使用する既定のセル スタイルを取得または設定します。帳簿のような効果を出すために使用します。 |
||
コントロールの行ヘッダーが使用する既定のセル スタイルを取得または設定します。visual スタイルが有効な場合は、現在のテーマでオーバーライドされます。 |
||
コントロールの列ヘッダーが使用する既定のセル スタイルを取得または設定します。visual スタイルが有効な場合は、現在のテーマでオーバーライドされます。 |
||
DataGridViewCell と派生クラス |
セル レベルで指定されたスタイルを取得または設定します。このスタイルは、上位レベルから継承したスタイルをオーバーライドします。 |
|
InheritedStyle |
DataGridViewCell、DataGridViewRow、DataGridViewColumn、および派生クラス |
セル、行、または列に現在適用されているすべてのスタイルを取得します。上位レベルから継承したスタイルを含みます。 |
前述のように、スタイル プロパティがまだ設定されていない場合にスタイル プロパティの値を取得すると、新しい DataGridViewCellStyle オブジェクトのインスタンスが自動的に生成されます。不要なオブジェクトが作成されないようにするため、行クラスや列クラスには、DefaultCellStyle プロパティが設定されているかどうかを確認するためにチェックできる HasDefaultCellStyle プロパティが用意されています。同様に、セル クラスには、Style プロパティが設定されているかどうかを示す HasStyle プロパティがあります。
各スタイル プロパティには、対応する DataGridView コントロールの PropertyNameChanged イベントがあります。行、列、およびセルのプロパティの場合、イベント名は "Row"、"Column"、または "Cell" で始まります (たとえば、RowDefaultCellStyleChanged)。これらの各イベントは、対応するスタイル プロパティが異なる DataGridViewCellStyle オブジェクトに設定されているときに発生します。これらのイベントは、スタイル プロパティから DataGridViewCellStyle オブジェクトを取得してプロパティ値を変更したときには発生しません。セル スタイル オブジェクト自体に対する変更に対応するには、CellStyleContentChanged イベントを処理します。
スタイルの継承
各 DataGridViewCell は、その InheritedStyle プロパティから外観を取得します。このプロパティが返す DataGridViewCellStyle オブジェクトは、DataGridViewCellStyle 型のプロパティの階層構造から値を継承します。これらのプロパティを以下に示します。ヘッダー セル以外のセルの InheritedStyle が値を取得する順に記載します。
DataGridView.AlternatingRowsDefaultCellStyle (奇数のインデックス番号を持つ行のセルのみ)
行および列のヘッダー セルの場合、InheritedStyle プロパティには、指定した順序で、以下に示すソース プロパティの値が設定されます。
このプロセスを説明する図を次に示します。
特定の行および列が継承したスタイルにアクセスすることもできます。列の InheritedStyle プロパティは、次のプロパティから値を継承します。
行の InheritedStyle プロパティは、次のプロパティから値を継承します。
DataGridView.AlternatingRowsDefaultCellStyle (奇数のインデックス番号を持つ行のセルのみ)
InheritedStyle プロパティが返す DataGridViewCellStyle オブジェクトの各プロパティの場合、プロパティ値は、DataGridViewCellStyle クラスの既定値以外の値に、対応するプロパティが設定された適切なリストの最初のセル スタイルから取得されます。
例のセルの ForeColor プロパティ値が、そのセルを含む列から継承されるしくみを次の表に示します。
DataGridViewCellStyle 型のプロパティ |
取得されるオブジェクトの ForeColor 値の例 |
---|---|
この場合、セルの行の Color.Red 値はリストの最初の値 (実際の値) です。この値が、セルの InheritedStyle の ForeColor プロパティ値になります。
さまざまな DataGridViewCellStyle プロパティがさまざまな場所から値を継承できるしくみを次の図に示します。
スタイルの継承を利用することにより、同じ情報を複数の場所で指定せずに、コントロール全体に適切なスタイルを指定できます。
ヘッダー セルは前述のとおりにスタイルを継承しますが、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.CellMouseEnter や CellMouseLeave などのイベントに応答して、個々のセルのスタイルを動的に変更することもできます。たとえば、CellMouseEnter イベントのハンドラ内に (セルの Style プロパティから取得した) セルの背景色の現在値を格納し、セル上にマウスが配置されたときにセルを強調表示する新しい色を設定できます。その後、CellMouseLeave イベントのハンドラ内で背景色を元の色に戻すことができます。
メモ : |
---|
特定のスタイル値が設定されているかどうかにかかわらず、セルの Style プロパティに格納された値をキャッシュすることは重要です。スタイル設定を一時的に置き換えた場合、元の "設定なし" の状態に戻すことによって、セルのスタイル設定を再度上位レベルから継承できます。スタイルが継承されているかどうかにかかわらず、セルに対して有効になっている実際のスタイルを確認する必要があるときは、セルの InheritedStyle プロパティを使用します。 |
参照
処理手順
方法 : Windows フォーム DataGridView コントロールの既定のセル スタイルを設定する
概念
Windows フォーム DataGridView コントロールでのデータの書式設定
参照
DataGridView.AlternatingRowsDefaultCellStyle
DataGridView.ColumnHeadersDefaultCellStyle
DataGridView.RowHeadersDefaultCellStyle
DataGridView.RowsDefaultCellStyle
DataGridViewBand.InheritedStyle
DataGridViewRow.InheritedStyle
DataGridViewColumn.InheritedStyle
DataGridViewBand.DefaultCellStyle
DataGridViewCell.InheritedStyle
DataGridView.CellStyleContentChanged