Selectively calling CurrentCell.EndEdit when you are in the last column worked around the problem in your sample. The code is below.
Another option is to make the enter wrap to the next row. You can do this by setting a property.
this.grid.Model.Options.WrapCellBehavior = GridWrapCellBehavior.WrapRow;
But in this case, the sample problem will exist on the bottom most-right most cell. So, you would have to call EndEdit on the last cell in the grid to force the cell to lose focus in that case.
private bool inEvent = false;
private void grid_CurrentCellValidating(object sender, CancelEventArgs e)
{
GridControlBase grid = sender as GridControlBase;
GridCurrentCell cc = grid.CurrentCell;
if(!inEvent && grid.Model[cc.RowIndex, cc.ColIndex].Format == "P2")
{
string s = cc.Renderer.ControlText;
if(s.IndexOf("%") > -1)
s = s.Replace("%","");
double d;
if(double.TryParse(s, System.Globalization.NumberStyles.Any, null, out d))
{
d/=100;
cc.Renderer.Control.Text = d.ToString();
}
if(cc.ColIndex == grid.Model.ColCount)
{
inEvent = true;
cc.EndEdit();
inEvent = false;
}
}
}