Hola mira lo que puedes hacer es lo siguiente:
Puedes ir creando tus columnas dependiendo de las columnas de tu consulta y mostrar u oculatar las que necesites o simplemente no crearlas así por ejemplo
Código:
BoundColumn bclCol;
for(int i=0;i<dtResultado.Columns.Count;i++)
{
bclCol = new BoundColumn();
bclCol.DataField = dtResultado.Columns[i].ColumnName;
bclCol.HeaderText = dtResultado.Columns[i].ColumnName;
this.dgrResultado.Columns.Add(bclCol);
}
Y bueno eso es lo mas simple pero ahi tu le puedes dar porcentajes a las columnas y otras cosas mas dependiendo de lo que necesites
Una cosa cada vez que ocurre un postback tienes que nuevamnete recargar tu DataGrid o de lo contrario las columnas se perderan
Espero haber hacertado con tu pregunta y te sirva.
Saludos