Serialcoder en Français Serialcoder in English
TEL : +33 (0)9 72 13 15 17

Windows Forms FAQ resources

5. Windows Forms Datagrid

5.58 How can I put up a confirmation question when the user tries to delete a row in the datagrid by clicking on the row header and pressing the Delete key?


You can handle this by subclassing your grid and overriding either PreProcessMessage or ProcessDialogKey. The code below assumes your datasource is a dataview. If it is not, you could just remove that check

[C#]
public override bool PreProcessMessage( ref Message msg )
{
     Keys keyCode = (Keys)(int)msg.WParam & Keys.KeyCode;
     if(msg.Msg == WM_KEYDOWN
          && keyCode == Keys.Delete
          && ((DataView) this.DataSource).AllowDelete)
     {
          if(MessageBox.Show("Delete this row?", "", MessageBoxButtons.YesNo) == DialogResult.No)
               return true;
     }
     return base.PreProcessMessage(ref msg);
}

[VB.NET] (courtesy of Erik Johansen)
Public Class DataGrid_Custom
     Inherits DataGrid

     Private Const WM_KEYDOWN = &H100

     Public Overrides Function PreProcessMessage(ByRef msg As System.Windows.Forms.Message) As Boolean

          Dim keyCode As Keys = CType((msg.WParam.ToInt32 And Keys.KeyCode), Keys)
          If msg.Msg = WM_KEYDOWN And keyCode = Keys.Delete Then
               If MessageBox.Show("Delete This Row?", "Confirm Delete", MessageBoxButtons.YesNo) = DialogResult.No Then
                    Return True
               End If
          End If
          Return MyBase.PreProcessMessage(msg)

     End Function
End Class