You can try using this event. I am sure you will have to spend some time cleaning this up to handle the cases you wnat to handle.
int startRow, startCol;
private void gridGroupingControl1_TableControlCurrentCellMoved(object sender, GridTableControlCurrentCellMovedEventArgs e)
{
GridCurrentCell cc = e.TableControl.CurrentCell;
if(Control.MouseButtons == MouseButtons.None
&& 0 != (Control.ModifierKeys & Keys.Shift))
{
GridRangeInfo r1 = GridRangeInfo.Cell(startRow, startCol);
GridRangeInfo r2 = GridRangeInfo.Cell(cc.MoveToRowIndex, cc.MoveToColIndex);
r2 = r2.UnionRange(r1);
e.TableControl.Model.Selections.Clear();
e.TableControl.Model.Selections.Ranges.Add(r2);
e.TableControl.InvalidateRange(r2);
}
else
{
startRow = cc.RowIndex;
startCol = cc.ColIndex;
}
}