You can try handling these events to see if this will will for you.
private int moveToCol = -1;
private int moveToRow = -1;
private void gridDataBoundGrid1_RowLeave(object sender, GridRowEventArgs e)
{
if(somethingIsBad)
{
this.gridDataBoundGrid1.BeginUpdate();
this.moveToCol = badColumnIndex;
this.moveToRow = e.RowIndex;
}
}
private void gridDataBoundGrid1_CurrentCellMoved(object sender, GridCurrentCellMovedEventArgs e)
{
if(this.moveToCol > -1)
{
int col = this.moveToCol;
this.moveToCol = -1;
this.gridDataBoundGrid1.EndUpdate();
this.gridDataBoundGrid1.CurrentCell.MoveTo(this.moveToRow, col);
}
}