Hola, eso pasa porque estas instanciando el formulario varias veces, cada que tu lo instancias crea nuevamente los controles por lo tanto los crea limpios.
 
Te paso la solución:
Todo esto va en el formulario que abreres desde otro o desde un MDI. 
Primero create una instancia: 
Código:
 private static frmNombreDeFormulario frmInstance = null;
  Después coloca este código en alguna parte de tu pantalla:
Este codigo nos sirve para que el objeto en este caso la pantalla no se instancie mas de una vez, es decir si ya esta abierta y con datos ya no la vuelva a cargar. 
Código:
 public static frmNombreDeFormulario Instance(string strConn)
{
    if (((frmInstance == null) || (frmInstance.IsDisposed == true)))
    {
        frmInstance = new frmNombreDeFormulario ();
    }
    frmInstance.BringToFront();
    return frmInstance;
}
  y por ultimo cuando lo vallas a abrir haslo asi: 
Código:
 frmNombreDeFormulario  _frmNombreDeFormulario  = null;
_frmNombreDeFormulario = frmNombreDeFormulario.Instance();
_frmNombreDeFormulario.Show;
  Espero que te sea de utilidad.