This worked for me in a sample (tabbing, entering, and clicking).
Handle the CurrentCellValidating event and validate the value yourself. You can cancel it and set the ErrorMessage if the value is not a double.
private void gridDataBoundGrid1_CurrentCellValidating(object sender, CancelEventArgs e)
{
GridCurrentCell cc = this.gridDataBoundGrid1.CurrentCell;
if(cc.RowIndex > 0 && cc.ColIndex == 2)
{
double d;
if(!double.TryParse(cc.Renderer.ControlText,
System.Globalization.NumberStyles.Any, null, out d))
{
e.Cancel = true;
cc.ErrorMessage = "MyMessage";
}
}