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

Platform: WinForms| Category: Datagrid

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

Share with

Related FAQs

Couldn't find the FAQs you're looking for?

Please submit your question and answer.