I think solution 3 might be done a little easier by using your idea with a little modification. Please note that I am more familiar with VB.Net so the code may
not be entirely correct.
DataTable dt = new DataTable();
dt.Columns.Add("A");
dt.Columns.Add("B");
dt.Columns.Add("C");
foreach (DataRow dr in datatable.Rows)
{
dr = dt.NewRow();
dr["A"] = "A" + (i + 1).ToString();
dr["B"] = "B" + (i + 1).ToString();
dr["C"] = "C" + (i + 1).ToString();
dt.Rows.Add(dr);
}
dataGridView1.DataSource = dt;