El problema esta en el bucle. En realidad simplemente tenias que hacer que el dataSource del grid fuese la lista y hacer el binding, sin necesidad de bucles. Por lo que es el resto de código lo veo bien.
Aqui tienes un ejemplo de como usar un ArrayList como DataSource en un grid. Si igualmente sigue sin rellenarte el grid, yo empezaría por lo más sencillo: depurando la aplicación con puntos de interrupción donde haces la select (para ver si efectivamente devuelve un ArrayList con datos) y luego al hacer el binding para ver si el contenido del DataSource tiene datos.