The following might work.
Handle the CellValidating and cancel any changes unless the last key pressed was enter.
EDIT:
Subclass the DataGridView control with your own class and add the following code to it:
private bool m_lastWasEnter = false;
public bool LastWasEnter()
{
return m_lastWasEnter;
}
protected override bool ProcessDialogKey(System.Windows.Forms.Keys keyData)
{
m_lastWasEnter = keyData == Keys.Return;
return base.ProcessDialogKey(keyData);
}
Then you could just add the following to the handler of the CellValidating event:
e.Cancel = !instanceOfYourControl.LastWasEnter();
This won't give you exactly what you want but should make sure that it'll only stop the editing if the user pressed enter at least and you should be able to modify it to get your exact requirements to be met.