When you use QueryCoveredRange, any time e.RowIndex and e.COlIndex point yo any cell in a desired covered range, you must explicilty specify the range. (ie, you just do not specify the range for the top-left cell, instead you need to specify the range for every cell in the range).
So, try this code (I may have the arithmetic wrong, but it shows the idea.)
private void gridControl1_QueryCoveredRange(object sender, GridQueryCoveredRangeEventArgs e)
{
e.Handled = false;
if (e.RowIndex == 0 && e.ColIndex > 0)
{
int start = 4 * ((e.ColIndex - 1) / 4) + 1;
e.Range = GridRangeInfo.Cells(0, start, 0, start + 3);
e.Handled = true;
}
}