Windows フォーム DataGridView コントロールでのセルのスタイルCell Styles in the Windows Forms DataGridView Control

コントロール内の各セル DataGridView は、テキスト形式、背景色、前景色、フォントなど、独自のスタイルを持つことができます。Each cell within the DataGridView control can have its own style, such as text format, background color, foreground color, and font. ただし、通常は、複数のセルで特定のスタイル特性を共有します。Typically, however, multiple cells will share particular style characteristics.

スタイルを共有するセルのグループには、特定の行または列内のすべてのセル、特定の値を含むすべてのセル、またはコントロール内のすべてのセルを含めることができます。Groups of cells that share styles may include all cells within particular rows or columns, all cells that contain particular values, or all cells in the control. これらのグループが重なっているため、各セルのスタイル情報が複数の場所から取得される場合があります。Because these groups overlap, each cell may get its styling information from more than one place. たとえば、コントロール内のすべてのセルで同じフォントを使用する必要があり、通貨の DataGridView 列のセルだけが通貨形式を使用するようにし、負の値を持つ通貨セルのみが赤の前景色を使用するようにすることができます。For example, you may want every cell in a DataGridView control to use the same font, but only cells in currency columns to use currency format, and only currency cells with negative numbers to use a red foreground color.

DataGridViewCellStyle クラスThe DataGridViewCellStyle Class

クラスには DataGridViewCellStyle 、visual スタイルに関連する次のプロパティが含まれています。The DataGridViewCellStyle class contains the following properties related to visual style:

このクラスには、書式設定に関連する次のプロパティも含まれています。This class also contains the following properties related to formatting:

これらのプロパティおよびその他のセルスタイルのプロパティの詳細については、 DataGridViewCellStyle 以下の「関連項目」セクションに記載されているリファレンスドキュメントとトピックを参照してください。For more information on these properties and other cell-style properties, see the DataGridViewCellStyle reference documentation and the topics listed in the See Also section below.

DataGridViewCellStyle オブジェクトの使用Using DataGridViewCellStyle Objects

DataGridViewCellStyle DataGridView 、、、およびの各 DataGridViewColumn DataGridViewRow DataGridViewCell クラスとその派生クラスのさまざまなプロパティからオブジェクトを取得できます。You can retrieve DataGridViewCellStyle objects from various properties of the DataGridView, DataGridViewColumn, DataGridViewRow, and DataGridViewCell classes and their derived classes. これらのプロパティのいずれかがまだ設定されていない場合は、その値を取得すると新しいオブジェクトが作成され DataGridViewCellStyle ます。If one of these properties has not yet been set, retrieving its value will create a new DataGridViewCellStyle object. 独自のオブジェクトをインスタンス化 DataGridViewCellStyle して、これらのプロパティに割り当てることもできます。You can also instantiate your own DataGridViewCellStyle objects and assign them to these properties.

複数の要素間でオブジェクトを共有することによって、スタイル情報の不要な重複を回避でき DataGridViewCellStyle DataGridView ます。You can avoid unnecessary duplication of style information by sharing DataGridViewCellStyle objects among multiple DataGridView elements. コントロール、列、および行の各レベルで設定されたスタイルによって、各レベルがセルレベルまでフィルター処理されるため、上記のレベルとは異なる各レベルのスタイルプロパティのみを設定することにより、スタイルの重複を回避することもできます。Because the styles set at the control, column, and row levels filter down through each level to the cell level, you can also avoid style duplication by setting only those style properties at each level that differ from the levels above. 詳細については、後の「スタイルの継承」セクションを参照してください。This is described in more detail in the Style Inheritance section that follows.

次の表に、オブジェクトを取得または設定する主なプロパティを示し DataGridViewCellStyle ます。The following table lists the primary properties that get or set DataGridViewCellStyle objects.

プロパティProperty クラスClasses 説明Description
DefaultCellStyle DataGridViewDataGridViewColumnDataGridViewRow 、およびの各派生クラスDataGridView, DataGridViewColumn, DataGridViewRow, and derived classes コントロール全体 (ヘッダーセルを含む)、列、または行内のすべてのセルで使用される既定のスタイルを取得または設定します。Gets or sets default styles used by all cells in the entire control (including header cells), in a column, or in a row.
RowsDefaultCellStyle DataGridView コントロールのすべての行で使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by all rows in the control. これには、ヘッダーセルは含まれません。This does not include header cells.
AlternatingRowsDefaultCellStyle DataGridView コントロールの交互の行で使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by alternating rows in the control. 元帳に似た効果を作成するために使用します。Used to create a ledger-like effect.
RowHeadersDefaultCellStyle DataGridView コントロールの行ヘッダーによって使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by the control's row headers. Visual スタイルが有効になっている場合、現在のテーマによってオーバーライドされます。Overridden by the current theme if visual styles are enabled.
ColumnHeadersDefaultCellStyle DataGridView コントロールの列ヘッダーによって使用される既定のセルスタイルを取得または設定します。Gets or sets default cell styles used by the control's column headers. Visual スタイルが有効になっている場合、現在のテーマによってオーバーライドされます。Overridden by the current theme if visual styles are enabled.
Style DataGridViewCell および派生クラスDataGridViewCell and derived classes セルレベルで指定されたスタイルを取得または設定します。Gets or sets styles specified at the cell level. これらのスタイルは、上位レベルから継承されたスタイルよりも優先されます。These styles override those inherited from higher levels.
InheritedStyle DataGridViewCellDataGridViewRowDataGridViewColumn 、およびの各派生クラスDataGridViewCell, DataGridViewRow, DataGridViewColumn, and derived classes 上位レベルから継承されたスタイルを含む、セル、行、または列に現在適用されているすべてのスタイルを取得します。Gets all the styles currently applied to the cell, row, or column, including styles inherited from higher levels.

前述のように、 DataGridViewCellStyle プロパティが以前に設定されていない場合、スタイルプロパティの値を取得すると、新しいオブジェクトが自動的にインスタンス化されます。As mentioned above, getting the value of a style property automatically instantiates a new DataGridViewCellStyle object if the property has not been previously set. これらのオブジェクトを不必要に作成しないように、行クラスと列クラスにはプロパティがあり、プロパティ HasDefaultCellStyle DefaultCellStyle が設定されているかどうかを確認できます。To avoid creating these objects unnecessarily, the row and column classes have a HasDefaultCellStyle property that you can check to determine whether the DefaultCellStyle property has been set. 同様に、セルクラスには、 HasStyle Style プロパティが設定されているかどうかを示すプロパティがあります。Similarly, the cell classes have a HasStyle property that indicates whether the Style property has been set.

各スタイルプロパティには、コントロールに対応する PropertyName Changed イベントがあり DataGridView ます。Each of the style properties has a corresponding PropertyNameChanged event on the DataGridView control. 行、列、およびセルの各プロパティの場合、イベントの名前は " Row "、" Column "、または " Cell " (など) で始まり RowDefaultCellStyleChanged ます。For row, column, and cell properties, the name of the event begins with "Row", "Column", or "Cell" (for example, RowDefaultCellStyleChanged). これらの各イベントは、対応するスタイルプロパティが別のオブジェクトに設定されている場合に発生し DataGridViewCellStyle ます。Each of these events occurs when the corresponding style property is set to a different DataGridViewCellStyle object. これらのイベントは、 DataGridViewCellStyle スタイルプロパティからオブジェクトを取得し、そのプロパティ値を変更したときには発生しません。These events do not occur when you retrieve a DataGridViewCellStyle object from a style property and modify its property values. セルスタイルオブジェクト自体への変更に応答するには、イベントを処理し CellStyleContentChanged ます。To respond to changes to the cell style objects themselves, handle the CellStyleContentChanged event.

スタイルの継承Style Inheritance

各は、その DataGridViewCell プロパティから外観を取得し InheritedStyle ます。Each DataGridViewCell gets its appearance from its InheritedStyle property. DataGridViewCellStyleこのプロパティによって返されるオブジェクトは、型のプロパティの階層から値を継承し DataGridViewCellStyle ます。The DataGridViewCellStyle object returned by this property inherits its values from a hierarchy of properties of type DataGridViewCellStyle. これらのプロパティは、 InheritedStyle ヘッダー以外のセルのが値を取得する順序で下に一覧表示されます。These properties are listed below in the order in which the InheritedStyle for non-header cells obtains its values.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (インデックス番号が奇数の行のセルのみ)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

行と列のヘッダーセルの場合、 InheritedStyle プロパティは、指定された順序で、次のソースプロパティのリストの値によって設定されます。For row and column header cells, the InheritedStyle property is populated by values from the following list of source properties in the given order.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle または DataGridView.RowHeadersDefaultCellStyleDataGridView.ColumnHeadersDefaultCellStyle or DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

このプロセスを説明する図を次に示します。The following diagram illustrates this process.

DataGridViewCellStyle 型のプロパティProperties of type DataGridViewCellStyle

また、特定の行と列によって継承されたスタイルにアクセスすることもできます。You can also access the styles inherited by specific rows and columns. Column プロパティは、 InheritedStyle 次のプロパティからその値を継承します。The column InheritedStyle property inherits its values from the following properties.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Row プロパティは、 InheritedStyle 次のプロパティからその値を継承します。The row InheritedStyle property inherits its values from the following properties.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (インデックス番号が奇数の行のセルのみ)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

プロパティ DataGridViewCellStyle によって返されるオブジェクトの各プロパティについて InheritedStyle 、プロパティ値は、対応するプロパティがクラスの既定値以外の値に設定されている、適切なリストの最初のセルスタイルから取得され DataGridViewCellStyle ます。For each property in a DataGridViewCellStyle object returned by an InheritedStyle property, the property value is obtained from the first cell style in the appropriate list that has the corresponding property set to a value other than the DataGridViewCellStyle class defaults.

次の表は、 ForeColor 例のセルのプロパティ値が、その親列から継承される方法を示しています。The following table illustrates how the ForeColor property value for an example cell is inherited from its containing column.

型のプロパティ DataGridViewCellStyleProperty of type DataGridViewCellStyle 取得した ForeColor オブジェクトの値の例Example ForeColor value for retrieved object
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 セルの行の値は、リストの最初の実際の値になります。In this case, the Color.Red value from the cell's row is the first real value on the list. これは、 ForeColor セルののプロパティ値になり InheritedStyle ます。This becomes the ForeColor property value of the cell's InheritedStyle.

次の図は、さまざまな DataGridViewCellStyle プロパティが異なる場所から値を継承する方法を示しています。The following diagram illustrates how different DataGridViewCellStyle properties can inherit their values from different places.

DataGridView プロパティ-値の継承DataGridView property-value inheritance

スタイルの継承を利用することで、複数の場所で同じ情報を指定しなくても、コントロール全体に適したスタイルを提供できます。By taking advantage of style inheritance, you can provide appropriate styles for the entire control without having to specify the same information in multiple places.

ヘッダーセルは、説明のとおりスタイル継承に参加しますが、コントロールのプロパティとプロパティによって返されるオブジェクトには、 ColumnHeadersDefaultCellStyle RowHeadersDefaultCellStyle DataGridView プロパティによって返されるオブジェクトのプロパティ値をオーバーライドする初期プロパティ値があり DefaultCellStyle ます。Although header cells participate in style inheritance as described, the objects returned by the ColumnHeadersDefaultCellStyle and RowHeadersDefaultCellStyle properties of the DataGridView control have initial property values that override the property values of the object returned by the DefaultCellStyle property. プロパティによって返されるオブジェクトに対して設定されたプロパティを DefaultCellStyle 行ヘッダーおよび列ヘッダーに適用する場合は、プロパティおよびプロパティによって返されるオブジェクトの対応するプロパティを、クラスに指定されている ColumnHeadersDefaultCellStyle 既定値に設定する必要があり RowHeadersDefaultCellStyle DataGridViewCellStyle ます。If you want the properties set for the object returned by the DefaultCellStyle property to apply to row and column headers, you must set the corresponding properties of the objects returned by the ColumnHeadersDefaultCellStyle and RowHeadersDefaultCellStyle properties to the defaults indicated for the DataGridViewCellStyle class.


視覚スタイルが有効になっている場合、行ヘッダーと列ヘッダー (を除く TopLeftHeaderCell ) は、現在のテーマによって自動的にスタイルが設定され、これらのプロパティによって指定されたすべてのスタイルがオーバーライドされます。If visual styles are enabled, the row and column headers (except for the TopLeftHeaderCell) are automatically styled by the current theme, overriding any styles specified by these properties.

DataGridViewButtonColumn型、 DataGridViewImageColumn 型、および DataGridViewCheckBoxColumn 型も、column プロパティによって返されるオブジェクトの一部の値を初期化し DefaultCellStyle ます。The DataGridViewButtonColumn, DataGridViewImageColumn, and DataGridViewCheckBoxColumn types also initialize some values of the object returned by the column DefaultCellStyle property. 詳細については、これらの型のリファレンスドキュメントを参照してください。For more information, see the reference documentation for these types.

動的なスタイル設定Setting Styles Dynamically

特定の値を持つセルのスタイルをカスタマイズするには、イベントのハンドラーを実装し DataGridView.CellFormatting ます。To customize the styles of cells with particular values, implement a handler for the DataGridView.CellFormatting event. このイベントのハンドラーは、型の引数を受け取り DataGridViewCellFormattingEventArgs ます。Handlers for this event receive an argument of the DataGridViewCellFormattingEventArgs type. このオブジェクトには、書式設定されているセルの値をコントロール内のその位置と共に判断するためのプロパティが含まれてい DataGridView ます。This object contains properties that let you determine the value of the cell being formatted along with its location in the DataGridView control. このオブジェクトには、 CellStyle InheritedStyle 書式設定されるセルのプロパティの値に初期化されるプロパティも含まれています。This object also contains a CellStyle property that is initialized to the value of the InheritedStyle property of the cell being formatted. セルスタイルのプロパティを変更して、セルの値と場所に適したスタイル情報を指定できます。You can modify the cell style properties to specify style information appropriate to the cell value and location.


RowPrePaintイベントと RowPostPaint イベントは、 DataGridViewCellStyle イベントデータ内でもオブジェクトを受け取りますが、その場合は読み取り専用の行プロパティのコピーであるため、 InheritedStyle 変更内容はコントロールに影響しません。The RowPrePaint and RowPostPaint events also receive a DataGridViewCellStyle object in the event data, but in their case, it is a copy of the row InheritedStyle property for read-only purposes, and changes to it do not affect the control.

イベントやイベントなどのイベントに応じて、個々のセルのスタイルを動的に変更することもでき DataGridView.CellMouseEnter CellMouseLeave ます。You can also dynamically modify the styles of individual cells in response to events such as the DataGridView.CellMouseEnter and CellMouseLeave events. たとえば、イベントのハンドラーで、 CellMouseEnter セルの背景色の現在の値 (セルのプロパティを通じて取得される) を格納 Style し、マウスをポイントしたときにセルを強調表示する新しい色に設定することができます。For example, in a handler for the CellMouseEnter event, you could store the current value of the cell background color (retrieved through the cell's Style property), then set it to a new color that will highlight the cell when the mouse hovers over it. イベントのハンドラーでは、 CellMouseLeave 背景色を元の値に戻すことができます。In a handler for the CellMouseLeave event, you can then restore the background color to the original value.


Style特定のスタイル値が設定されているかどうかに関係なく、セルのプロパティに格納されている値をキャッシュすることが重要です。Caching the values stored in the cell's Style property is important regardless of whether a particular style value is set. スタイル設定を一時的に置き換える場合は、元の "設定なし" の状態に復元することで、そのセルが上位レベルからスタイル設定を継承するようになります。If you temporarily replace a style setting, restoring it to its original "not set" state ensures that the cell will go back to inheriting the style setting from a higher level. スタイルが継承されているかどうかに関係なく、セルに対して実際に有効なスタイルを決定する必要がある場合は、セルのプロパティを使用し InheritedStyle ます。If you need to determine the actual style in effect for a cell regardless of whether the style is inherited, use the cell's InheritedStyle property.

関連項目See also