DataGridViewCell

DataGridViewのセルを表します。

クラス階層

派生クラス

プロパティ

プロパティ 内容
Type EditType セルの編集コントロールの型
object Value セルの値

セルに表示される値であり、Style.NullValueが設定されているならば、値がnullのときはその値となる

Type ValueType セルの値のデータ型
object FormattedValue セルの表示用に書式化された値 (セルの書式化された表現)
Type FormattedValueType セルの表示用に書式化された値のデータ型
object EditedFormattedValue セルの書式化された値。編集中かコミット前かに無関係
DataGridView DataGridView この要素に関連付けられているDataGridView。関連付けられていなければnull
DataGridViewColumn OwningColumn セルを格納している列
DataGridViewRow OwningRow セルを格納している行
int ColumnIndex セルの列インデックス
int RowIndex セルの親の行インデックス
Rectangle ContentBounds セルのコンテンツ領域に外接する四角形
string ErrorText セルに関連付けられたエラー条件を表すテキスト
string ToolTipText セルに関連付けられたツールチップ テキスト
DataGridViewCellStyle Style セル用のスタイル
DataGridViewCellStyle InheritedStyle セルに適用されているスタイル
bool HasStyle trueならば、Styleプロパティが設定されている

Styleプロパティにnullを設定することでスタイルを無効にでき、HasStyleはfalseとなる

Styleプロパティの値を取得するとDataGridViewCellStyleのインスタンスが作成され、StyleプロパティはnullではなくなりHasStyleはtrueを返す。よってHasStyleがtrueを返すことでは、Styleプロパティが設定されていることを判定できない

bool ReadOnly trueならば、ユーザーはセルのデータを編集できない

行または列全体に適用するにはDataGridViewRow.ReadOnlyまたはDataGridViewColumn.ReadOnlyで指定でき、これらの設定は個別のセルの設定を上書きする

データソースで読み取り専用に指定されるとこれもtrueとなり、InvalidOperationExceptionとなりfalseには変更できない。

ReadOnlyの指定はユーザーによる編集を制限するだけのため、プログラムからはValueプロパティに設定できる

bool IsInEditMode trueならば、編集モード
bool Selected trueならば、セルが選択されている
bool Displayed trueならば、セルの全部または一部が画面上にある
     
プロパティ - DataGridViewCell Class (System.Windows.Forms) | Microsoft Learn

ErrorText

DataSourceでエラーを表すテキストが設定されていると、それが返されます。これに空文字列を設定してもそれは変更されませんが、空文字列以外を設定するとそれに置き換えられ、次に空文字列を設定すると内容が削除されます。

ToolTipText

マウスポインタがセルに重なったときに、セルのツールチップとして表示する文字列を指定します。このプロパティがEmptyでなければその値が、セルの値が表示されるときに切り詰められているか一部が隠れていればセルの値が表示されます。いずれでもなければ表示されません。Remarks - DataGridViewCell.ToolTipText Property (System.Windows.Forms) | Microsoft Learn

Style

セルのスタイルに作用するプロパティは複数あり、それらが設定されているときには、最も上位のものが適用されます。Style Inheritance - Cell Styles in the Windows Forms DataGridView Control | Microsoft Learn

パフォーマンスを向上させるには、個々のセルにスタイルを指定せず、適用範囲の広い下位のものに指定します。セル スタイルの効率的な使用 - DataGridView コントロールの拡大縮小に関するベスト プラクティス - Windows Forms .NET Framework | Microsoft Learn

ヘッダーセルに影響する設定

優先順位の高い順。適用範囲が狭いほど優先される

  1. DataGridViewCell.Style
  2. DataGridView.ColumnHeadersDefaultCellStyle または DataGridView.RowHeadersDefaultCellStyle ※1
  3. DataGridView.DefaultCellStyle

※1 これらはすべての列ヘッダーと行ヘッダーに適用される。これを個別のヘッダーセルに適用するには、DataGridViewColumn.HeaderCellやDataGridViewRow.HeaderCellを介して設定する。

列ヘッダーを右側に合わせて配置するとき、SortModeがNotSortable以外ではグリフの空間分だけ右に余白ができます。この余白を除去するにはNotSortableとするか、オーナー描画します。c# - Right align a column in datagridview doesn't work - Stack Overflow

ヘッダーセルに指定のスタイルが適用されないときには、EnableHeadersVisualStylesをfalseとします。これが既定のtrueの状態では、視覚スタイルが有効なときはそのスタイルが適用されます。

ヘッダー以外のセルに影響する設定

  1. DataGridViewCell.Style
  2. DataGridViewRow.DefaultCellStyle
  3. DataGridView.AlternatingRowsDefaultCellStyle (奇数番目の行のセルだけ)
  4. DataGridView.RowsDefaultCellStyle
  5. DataGridViewColumn.DefaultCellStyle
  6. DataGridView.DefaultCellStyle

フォーカス喪失時の表示

DataGridViewはフォーカスを失ってもフォーカスのあるセルの表示が変化しないため、それが失われたことを認識しづらくなっています。この問題は、フォーカスの変化時にスタイルを設定し直すことで改善できます。DataGridViewフォーカス消失時のフォーカスがあったセルの青色(紺色)について

private void DataGridView_Enter(object sender, System.EventArgs e)
{
    dataGridView.RowsDefaultCellStyle.SelectionForeColor = dataGridView.DefaultCellStyle.SelectionForeColor;
    dataGridView.RowsDefaultCellStyle.SelectionBackColor = dataGridView.DefaultCellStyle.SelectionBackColor;
}

private void DataGridView1_Leave(object sender, System.EventArgs e)
{
    dataGridView.RowsDefaultCellStyle.SelectionForeColor = dataGridView.DefaultCellStyle.ForeColor;
    dataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.SystemColors.Control;
}

派生クラス

  • System.Windows.Forms.DataGridViewCell
    • System.Windows.Forms.DataGridViewHeaderCell
    • System.Windows.Forms.DataGridViewButtonCell
    • System.Windows.Forms.DataGridViewCheckBoxCell
    • System.Windows.Forms.DataGridViewComboBoxCell
    • System.Windows.Forms.DataGridViewImageCell
    • System.Windows.Forms.DataGridViewLinkCell
    • System.Windows.Forms.DataGridViewTextBoxCell
派生 - DataGridViewCell クラス (System.Windows.Forms) | Microsoft Learn

列にDataGridViewColumnを継承したクラスを指定することで、それに対応する列のセルが、それに対応する型となります。

DataGridViewTextBoxColumn column0 = new DataGridViewTextBoxColumn();
DataGridViewButtonColumn column1 = new DataGridViewButtonColumn();
DataGridViewLinkColumn column2 = new DataGridViewLinkColumn();

dataGridView.Columns.AddRange(new DataGridViewColumn[] { column0, column1, column2 });

int index = dataGridView.Rows.Add("A", "B", "C");
DataGridViewTextBoxCell cell0 = (DataGridViewTextBoxCell)dataGridView.Rows[index].Cells[0];
DataGridViewButtonCell cell1 = (DataGridViewButtonCell)dataGridView.Rows[index].Cells[1];
DataGridViewLinkCell cell2 = (DataGridViewLinkCell)dataGridView.Rows[index].Cells[2];

DataGridViewHeaderCell

行や列のヘッダーセルの、基底クラスです。

  • DataGridViewHeaderCell
    • DataGridViewRowHeaderCell
    • DataGridViewColumnHeaderCell
      • DataGridViewTopLeftHeaderCell
DataGridViewHeaderCell クラス (System.Windows.Forms) | Microsoft Learn

DataGridViewLinkCell

リンクを含むセルを表せます。リンク部分がクリックされたことは、DataGridView.CellContentClickイベントで検出できます。

LinkLabelとは異なり、文字列の一部にリンクを設定することはできません。

DataGridViewTextBoxCell

編集できるテキスト情報を提供できます。

独自のクラス

期待するコントロールを模したクラスがないならば、独自に作成します。 Build a Custom NumericUpDown Cell and Column for the DataGridView Control | Microsoft Learn DataGridView Cells でコントロールをホストする - Windows Forms .NET Framework | Microsoft Learn

そのときInitializeEditingControl()をオーバーライドする方法では、セルの編集時のコントロールしか変更できません。

既存のクラスと機能が重複するならば、それを継承して作成します。

public class OriginalCell: DataGridViewTextBoxCell

そのクラスのプロパティなどを変更する必要が無ければ、そのインスタンスをテンプレートとしてDataGridViewColumnを利用できます。

DataGridViewColumn column = new DataGridViewColumn(new OriginalCell());

一方でその必要があるならば、DataGridViewColumnを継承して列のクラスも作成します。

Microsoft Learnから検索