Conviene que no interactues con el control para construir las columnas y filas, en su lugar puedes definir un DataTable y construir la tabla allí, y entonces usar la propiedad DataSource del DataGridView. Recuerda, cuanta menos interacción directa exista por parte de tu código con los controles, mejor.
Fantástica idea, tampoco se me había ocurrido, muchas gracias. Ahora se muestra todo directamente. Lo utilizaré a partir de ahora incluso con un listbox o un listview, aunque sea una lista, para evitar el proceso de llenado poco a poco del control. es mejor con datasource