The PopulateValues method moves down the columns and not across the rows.
If you want to use some other loop order, then you can write your own populate method, and access the GridData object directly to gain speed over using indexers directly on the GridControl object. This way, you can control exactly the order your data is processed. Here is a little method that tries to populate a single row with values in a string array (which is what I think your sample code was trying to do.)
private void PopulateRow(int row, string[] strArray)
{
//make sure you don''t exceed grid or array bounds
int count = strArray.GetLength(0);
if(count >= this.gridControl1.ColCount)
count = this.gridControl1.ColCount - 1;
if(count > 0)
{
GridData data = this.gridControl1.Data;
for(int i = 0; i < count; ++i)
{
GridStyleInfo style = new GridStyleInfo();
style.CellValue = strArray[i];
data[row, i + 1] = style.Store;
}
}
}