Try adding code to both the loops that will skip the first three passes through the loops.
int numCols = grid.TableDescriptor.VisibleColumns.Count;
int i = 0;
foreach(GridVisibleColumnDescriptor cd in grid.TableDescriptor.VisibleColumns)
{
if(i > 2)
{
string s = grid.TableDescriptor.Columns[cd.Name].HeaderText;
dt.Columns.Add(new DataColumn(s, grid.TableDescriptor.Columns[cd.Name].FieldDescriptor.GetPropertyType()));
}
i += 1;
}