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ならば、セルの全部または一部が画面上にある |
DataSourceでエラーを表すテキストが設定されていると、それが返されます。これに空文字列を設定してもそれは変更されませんが、空文字列以外を設定するとそれに置き換えられ、次に空文字列を設定すると内容が削除されます。
マウスポインタがセルに重なったときに、セルのツールチップとして表示する文字列を指定します。このプロパティがEmptyでなければその値が、セルの値が表示されるときに切り詰められているか一部が隠れていればセルの値が表示されます。いずれでもなければ表示されません。Remarks - DataGridViewCell.ToolTipText Property (System.Windows.Forms) | Microsoft Learn
セルのスタイルに作用するプロパティは複数あり、それらが設定されているときには、最も上位のものが適用されます。Style Inheritance - Cell Styles in the Windows Forms DataGridView Control | Microsoft Learn
パフォーマンスを向上させるには、個々のセルにスタイルを指定せず、適用範囲の広い下位のものに指定します。セル スタイルの効率的な使用 - DataGridView コントロールの拡大縮小に関するベスト プラクティス - Windows Forms .NET Framework | Microsoft Learn
優先順位の高い順。適用範囲が狭いほど優先される
※1 これらはすべての列ヘッダーと行ヘッダーに適用される。これを個別のヘッダーセルに適用するには、DataGridViewColumn.HeaderCellやDataGridViewRow.HeaderCellを介して設定する。
列ヘッダーを右側に合わせて配置するとき、SortModeがNotSortable以外ではグリフの空間分だけ右に余白ができます。この余白を除去するにはNotSortableとするか、オーナー描画します。c# - Right align a column in datagridview doesn't work - Stack Overflow
ヘッダーセルに指定のスタイルが適用されないときには、EnableHeadersVisualStylesをfalseとします。これが既定のtrueの状態では、視覚スタイルが有効なときはそのスタイルが適用されます。
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; }
列に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];
行や列のヘッダーセルの、基底クラスです。
リンクを含むセルを表せます。リンク部分がクリックされたことは、DataGridView.CellContentClickイベントで検出できます。
LinkLabelとは異なり、文字列の一部にリンクを設定することはできません。
編集できるテキスト情報を提供できます。
期待するコントロールを模したクラスがないならば、独自に作成します。 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を継承して列のクラスも作成します。