DataGrid の全体・列・セル・行に関して、プロパティでの編集制御、イベントでの編集制御の方法を紹介します。
目次
グリッド全体の編集制御
グリッド全体を編集できないようにするには、DataGridView.ReadOnly プロパティを有効化(true)します。
this.dataGridView1.ReadOnly = true;
特定セルの編集制御(プロパティ利用)
特定セルを編集できないようにするには、セルの ReadOnly プロパティを利用します。
// 列名と行インデックスでのセル指定の場合 this.dataGridView1["Name", 1].ReadOnly = true; // 列インデックスと行インデックスでのセル指定の場合 this.dataGridView1[1, 1].ReadOnly = true;
特定セルの編集制御(イベント制御利用)
イベントによる、特定セルの編集制御を行うには、CellBeginEdit イベントを利用します。例えば、特定セルに対する編集をキャンセルする場合、次のように CurrentCell のセル位置を条件に、編集をキャンセルします。他にも、別のセルの値や状態など、必要な条件による編集制御が可能です。
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { //特定セルの編集制御(イベント制御利用) if (this.dataGridView1.CurrentCell == this.dataGridView1[1, 2]) { e.Cancel = true; } }
特定列の編集制御(プロパティ利用)
特定列を編集できないようにするには、列の ReadOnly プロパティを利用します。
// 列名での列指定の場合 this.dataGridView1.Columns["Age"].ReadOnly = true; // 列インデックスでの列指定の場合 this.dataGridView1.Columns[2].ReadOnly = true;
特定列の編集制御(イベント制御)
イベントによる、特定列の編集制御を行うには、CellBeginEdit イベントをハンドルし、CurrentCell プロパティ の 列情報(ここでは列インデックス)をもとに、e.Cancel = true として編集をキャンセルします。
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { //特定列の編集制御(イベント制御) if (this.dataGridView1.CurrentCell.ColumnIndex == 0) { e.Cancel = true; } }
特定行の編集制御(プロパティ利用)
特定行を編集できないようにするには、Row の ReadOnly プロパティを利用します。
this.dataGridView1.Rows[3].ReadOnly = true;
特定行の編集制御(イベント制御)
イベントによる、特定列の編集制御を行うには、CellBeginEdit イベントをハンドルし、CurrentCell プロパティ の 行情報(ここでは行インデックス)をもとに、e.Cancel = true として編集をキャンセルします。
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { //特定行の編集制御(イベント制御) if (this.dataGridView1.CurrentCell.RowIndex == 3) { e.Cancel = true; } }
行削除の制御
グリッド全体での行削除の制御を行うには、AllowUserToDeleteRows プロパティを利用します。デフォルトで有効化されているので、無効化する際には、AllowUserToDeleteRows プロパティに false を設定します。
this.dataGridView1.AllowUserToDeleteRows = false;
特定行での行削除の制御を行うには、UserDeletingRow イベントをハンドルし、キャンセル条件に合致すれば、e.Cancel = true とします。
private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) { // 特定行での行削除の制御 if(e.Row.Index == 0) { e.Cancel = true; } }
サンプル
サンプルアプリケーションは、.NET 8 で作成されています。利用にあたっては、後続の注意点をご参照ください。
実行結果
サンプルアプリケーションの注意点
ID 列のすべてのセルと Name 列 3 行目は、75-94 行目の実装により、編集不可の設定となっております。
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { //特定セルの編集制御(イベント制御利用) if (this.dataGridView1.CurrentCell == this.dataGridView1[1, 2]) { e.Cancel = true; } //特定列の編集制御(イベント制御) if (this.dataGridView1.CurrentCell.ColumnIndex == 0) { e.Cancel = true; } ////特定行の編集制御(イベント制御) //if (this.dataGridView1.CurrentCell.RowIndex == 3) //{ // e.Cancel = true; //} }