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

DataGridViewDataGridViewCellStyle 、、およびDataGridViewCellの各クラスとその派生クラスのさまざまなプロパティからオブジェクトを取得できます。 DataGridViewRow DataGridViewColumnYou 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 DataGridViewDataGridViewColumn、、およびの各派生クラスDataGridViewRowDataGridView, 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 DataGridViewCellDataGridViewRow、、およびの各派生クラスDataGridViewColumnDataGridViewCell, 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. 同様に、セルクラスにはHasStyleStyleプロパティが設定されているかどうかを示すプロパティがあります。Similarly, the cell classes have a HasStyle property that indicates whether the Style property has been set.

各スタイルプロパティには、 DataGridViewコントロールに対応するPropertyName Changedイベントがあります。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 DataGridViewCellStyleによって返されるオブジェクトの各プロパティについて、プロパティ値は、対応するプロパティがクラスの既定値以外の値に設定されている、適切なリストの最初のセルスタイルから取得されます。InheritedStyleFor 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 DataGridViewコントロールRowHeadersDefaultCellStyleのプロパティおよびプロパティによって返されるオブジェクトには、によって返されるオブジェクトのプロパティ値をオーバーライドする初期プロパティ値があります。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.

型、型DataGridViewButtonColumnDataGridViewCheckBoxColumnおよび型も、column DefaultCellStyleプロパティによって返されるオブジェクトの一部の値を初期化します。 DataGridViewImageColumnThe 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.


イベントRowPrePaintRowPostPaintイベントは、イベント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.CellMouseEnterCellMouseLeaveイベントなどのイベントに応じて、個々のセルのスタイルを動的に変更することもできます。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