Here is my workaround
You can derive from gridcontrol and override On(Preview)KeyDown/Up or catch the (Preview)KeyDown/Up events (which ever you like best for your situation)
if (e.Key == Key.Enter || e.Key == Key.Tab)
{
CustomDataGridControl grid = this;
Column c = grid.CurrentColumn;
if (c!=null && !c.HasValidationError)
{
int pos = grid.VisibleColumns.IndexOf(c);
if (pos >= grid.VisibleColumns.Count - 1)
{
e.Handled = true;
c = grid.VisibleColumns[0];
}
else
{
e.Handled = true;
c = grid.VisibleColumns[pos + 1];
}
DataRow cdr = grid.GetContainerFromItem(grid.CurrentItem) as DataRow;
if (cdr != null && !cdr.HasValidationError)
{
try
{
//cdr.EndEdit();//Removed becasue it is not needed in Grid 3.0 to update other cells
if (!cdr.HasValidationError)
{
UpdateSelected();//used for updating all selected rows with the current change
grid.CurrentColumn = c;
}
}
catch (Exception ex)
{
Console.Write(ex.ToString());
}
}
else
e.Handled = false;
}
}
//---------------------------------------------------------------
private void UpdateSelected()
{
//edit all selected rows
CustomDataGridControl grid = this;
string col = grid.CurrentColumn.FieldName;
object si = grid.CurrentItem;
Type t = si.GetType();
PropertyInfo pi = t.GetProperty(col);
object val = pi.GetValue(si, null);
if (pi != null)
{
foreach (object r in grid.SelectedItems)
{
if (!r.Equals(si))
pi.SetValue(r, val, null);
}
}
}