Buenas compañero. Como no eres muy explicito en el codigo que usas no se muy bien cómo orientarte, aunque se me ocurre una cosa.
si tu código es algo parecido a :
me.gridview1.datasource=Mitabla
me gridview1.databind()
if(me.gridview1.columns.count > 0)
das el formato a las columnas
entonces nunca tendrá el grid las colunas, ya que no se ha producido el binding de tu tabla con el grid aún.
Creo que una forma (la habrá más facil seguramente), pero como lo quieres hacer todos por código, es crear las columnas de tu grid a mano, desde codigo, en base a las que tengas en tu tabla de datos; y rellenar las columnas despues a mano, y olvidarte del gridview1.datasource = XXX.
Si necesitas más ayuda, sé un poco más explicito con el código.
Un saludo y suerte