Windows Forms DataGridView で、行削除の制御方法を紹介します。
行削除の無効化
デフォルトの設定で、エンドユーザーによる行の削除機能が有効化されています。行の削除を無効化するには、AllowUserToDeleteRows プロパティに false を設定します。
実装例
private void Form1_Load(object sender, EventArgs e)
{
...
this.dataGridView1.AllowUserToDeleteRows = false;
...
}
確認ダイアログによる行削除
ビジネス用件によっては、ユーザー確認による行の削除を決定する場合もあると思います。この場合、MessageBox による行削除のユーザー確認を加えることができます。プロパティによる制御ではなく、UserDeletingRow イベントを用いたイベント制御を行います。行削除を取りやめる場合には、e.Cancel = true; とします。行削除を行う場合は、特別な実装は不要で、そのままイベントを抜けます。
private void DataGridView2_UserDeletingRow(object? sender, DataGridViewRowCancelEventArgs e)
{
// 行 ID による行削除の確認
var rowId = (int)e.Row?.Cells["ID"].Value;
var result = MessageBox.Show(
$"行ID:{rowId} を削除しますか?",
"行削除の確認",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question);
if (result != DialogResult.OK) {
e.Cancel = true;
}
}
実行結果
左側の DataGridView では AllowUserToDeleteRows プロパティでの制御により、一律でユーザーによる行の削除ができません。右側の DataGridView では、確認ダイアログで OK を選択した場合のみ、行を削除できます。

サンプルアプリケーション
※ このサンプルアプリケーションは、.NET 9 で作成されています。