If I was doing something like this I would move away from thinking about the DataTable or the DataGridView and consider the information I'm trying to present as two separate lists of items - the green items and the red items.
If I just work my way through the datatable there is no easy way of telling when to increment the row number, or I have to keep going back to the next empty cell in the appropriate column.
However, if I have the two lists of items already separated out, I know how many rows I'm going to need (maximum of the count of items from each list), and I always know whereabouts in the list I need to look ... I just "pop" the next item each time...after checking to make sure there is anything left in the list!
E.g.
List<DataRow> greenItems = dt.Select("Flag_created ='Green'").ToList();
int g = greenItems.Count();
List<DataRow> redItems = dt.Select("Flag_created ='Red'").ToList();
int r = redItems.Count();
dataGridView1.Rows.Add(Math.Max(g, r));
for (var i = 0; i < dataGridView1.Rows.Count; i++)
{
if (i < greenItems.Count)
dataGridView1.Rows[i].Cells[greenColumn].Value = greenItems[i].ItemArray[0];
if (i < redItems.Count)
dataGridView1.Rows[i].Cells[redColumn].Value = redItems[i].ItemArray[0];
}