DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewの行をユーザーが削除できないようにする

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

無条件でユーザーがすべての行を削除できないようにする

通常はDataGridView内の行をDELETEキーで削除することができますが、DataGridViewコントロールのAllowUserToDeleteRowsプロパティをFalseとすることにより、ユーザーが行を削除することができなくなります。

VB.NET
コードを隠すコードを選択
'DataGridView1の行をユーザーが削除できないようにする
DataGridView1.AllowUserToDeleteRows = False
C#
コードを隠すコードを選択
//DataGridView1の行をユーザーが削除できないようにする
DataGridView1.AllowUserToDeleteRows = false;

ただしこのようにしても、DataGridViewRowCollection.Removeメソッドなどで行を削除することはできます。

補足:上記のようなコードを書く方法以外に、Visual Studioのスマートタグで、「削除を有効にする」のチェックを外す方法があります。
補足:「DataGridの一番下の新しい行(*行)が表示されないようにする」で紹介しているような、DataView.AllowDeleteプロパティをFalseにする方法でもユーザーの行削除を禁止できます。

条件に応じてユーザーが行を削除できないようにする

ユーザーが行を削除しようとしたとき、DataGridView.UserDeletingRowイベントが発生します。ここで削除しても構わないか判断して、条件により削除をキャンセルすることができます。

行を削除する前にユーザーに確認する例を以下に示します。

VB.NET
コードを隠すコードを選択
'DataGridView1のUserDeletingRowイベントハンドラ
Private Sub DataGridView1_UserDeletingRow(ByVal sender As Object, _
        ByVal e As DataGridViewRowCancelEventArgs) _
        Handles DataGridView1.UserDeletingRow
    '削除するかユーザーに確認する
    If MessageBox.Show("この行を削除しますか?", "削除の確認", _
        MessageBoxButtons.OKCancel, MessageBoxIcon.Question) <> _
            Windows.Forms.DialogResult.OK Then
        e.Cancel = True
    End If
End Sub
C#
コードを隠すコードを選択
//DataGridView1のUserDeletingRowイベントハンドラ
private void DataGridView1_UserDeletingRow(
    object sender, DataGridViewRowCancelEventArgs e)
{
    //削除するかユーザーに確認する
    if (MessageBox.Show("この行を削除しますか?",
        "削除の確認",
        MessageBoxButtons.OKCancel,
        MessageBoxIcon.Question) != DialogResult.OK)
    {
        e.Cancel = true;
    }
}
  • 履歴:
  • 2010/6/27 「行」とすべき箇所が「列」になっていたのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。