none
Actualizar listbox desde formulario hijo? RRS feed

  • Pregunta

  • Hola a todos, consulto sobre algo que estoy intentando, Tengo un formulario principal que me muestra una lista de productos. Luego utilizo otro formulario para dar las altas de productos. 

    Al realizar el alta deveria actualizar el listbox del formulario padre sin cerrar el hijo.

    e intentado de esta manera pero no refleja los cambios. 

    en el formulario hijo pongo el siguiente codigo

         Principal frm = new Principal();
         frm.listBox1.Items.Clear();
         frm.inizializar();

    Principal es el formulario padre 

    inicializar es la funcion en el formulario padre donde llena el listbox

    martes, 18 de marzo de 2014 9:02

Respuestas

  • Hola,

    No lo estás enfocando bien.

    Debes crear una propiedad en el formulario hijo en la que almacenes una referencia del padre, y posteriormente trabajas con la referencia:

    En el Hijo:

    public Principal FormPrincipal {get; set; }

    En el padre, cuando creas el formulario hijo la informas:

    var fHijo = new Hijo();
    fHijo.FormPrincipal = this;

    Y luego en el hijo puedes usar la referencia para:

    FormPrincipal.Inicializar();

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com


    martes, 18 de marzo de 2014 9:31
    Moderador
  • Hola de nuevo,

    El registro se añade correctamente?

    En que línea te marca el error?

    Que valor tiene FormPrincipal en el momento del error?


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com

    • Marcado como respuesta erep68 martes, 18 de marzo de 2014 11:35
    martes, 18 de marzo de 2014 10:43
    Moderador
  • Que extraño... ¿?

    Si en el padre al crear el formulario hijo inicializas correctamente el valor de esta propiedad, no debería ser null.

    Pon un punto de interrupción al inicio del código 'btn_insertar_Click' en el formulario hijo y comprueba que vale FormPrincipal.

    Y ya puestos, intercepta el evento Form_Load del hijo y comprueba también el valor de la propiedad allí.

    L


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com

    • Marcado como respuesta erep68 martes, 18 de marzo de 2014 11:34
    martes, 18 de marzo de 2014 11:21
    Moderador

Todas las respuestas

  • Hola,

    No lo estás enfocando bien.

    Debes crear una propiedad en el formulario hijo en la que almacenes una referencia del padre, y posteriormente trabajas con la referencia:

    En el Hijo:

    public Principal FormPrincipal {get; set; }

    En el padre, cuando creas el formulario hijo la informas:

    var fHijo = new Hijo();
    fHijo.FormPrincipal = this;

    Y luego en el hijo puedes usar la referencia para:

    FormPrincipal.Inicializar();

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com


    martes, 18 de marzo de 2014 9:31
    Moderador
  • Algo debo estar haciendo mal :)

    e seguido paso a paso lo que me dijiste y me da el siguiente error :

    Referencia a objeto no establecida como instancia de un objeto.

     
    martes, 18 de marzo de 2014 10:03
  • :)

    Puedes poner el código?

    Tanto del padre como del hijo.

    Thx,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com

    martes, 18 de marzo de 2014 10:06
    Moderador
  • En el padre tengo la función inizial()

     public void inizial()
            {
                var query = from q in context.Clientes
    
                            select q.Empresa;
    
                foreach (var clien in query)
                {
                    listBox1.Items.Add(clien);
                }
            }

    llamo al hijo desde el toolStripButton1

     private void toolStripButton1_Click(object sender, EventArgs e)
            {
                var fHijo = new insert();
                fHijo.FormPrincipal = this;
                fHijo.Show();
            }
    en el hijo tengo la declaracion 

    public Principal FormPrincipal { get; set; }
    

    y luego inserto el registro

    private void btn_insertar_Click(object sender, EventArgs e)
            {        
                var query = (from r in context.Clientes where r.Empresa == txt_empresa.Text select r).Count();
                if (query == 0)
                {
                    Clientes cliente = new Clientes()
                    {
                        Empresa = txt_empresa.Text,
                        nif = txt_nif.Text,
                        PersonaContacto = txt_contacto.Text,
                        Direccion = txt_direccion.Text,
                        cpostal = txt_codigo.Text,
                        Poblacion = txt_poblacion.Text,
                        Provincia = txt_provincia.Text,
                        FechaAlta = dtp_fecha_alta.Value,
                        Activo = cbx_activo.Checked
                    };
                    context.Clientes.AddObject(cliente);
                    context.SaveChanges();
                    int idCliente = cliente.id;
    
                    telefonos telefono = new telefonos()
                    {
                        Cliente_id = idCliente,
                        titulo = lbl_telefono.Text,
                        telefono = txt_telefono.Text
                    };
                    context.telefonos.AddObject(telefono);
    
                    correos correo = new correos()
                    {
                        Cliente_id = idCliente,
                        titulo = lbl_email.Text,
                        email = txt_email.Text
                    };
                    context.correos.AddObject(correo);
    
                    context.SaveChanges();
                    DialogResult result = MessageBox.Show("Registro Guardado Correctamente!!", "Info ", MessageBoxButtons.OK);
    
               
                        foreach (Control c in this.Controls)
                        {
    
                            if (c is TextBox)
                            {
    
                                c.Text = "";
    
                                //Enfoco en el primer TextBox
    
                                this.txt_empresa.Focus();
    
                            }
                            
                        }
                            FormPrincipal.inizial();
                        }else
                        {
                            MessageBox.Show("Esta empresa ya existe", "Info ", MessageBoxButtons.OK);
                        }
                   
                        
            }

    no se si me dejo algo ?

    ya se que si funcionase se duplicaría la información en el listbox pero ya haré clear cuando me funcione

    mercy por la ayuda!!!

    martes, 18 de marzo de 2014 10:23
  • Hola de nuevo,

    El registro se añade correctamente?

    En que línea te marca el error?

    Que valor tiene FormPrincipal en el momento del error?


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com

    • Marcado como respuesta erep68 martes, 18 de marzo de 2014 11:35
    martes, 18 de marzo de 2014 10:43
    Moderador
  • El registro se añade correctamente

    el error me lo marca en:

    private void btn_insertar_Click(object sender, EventArgs e)
            {        
                var query = (from r in context.Clientes where r.Empresa == txt_empresa.Text select r).Count();
                if (query == 0)
                {
                    Clientes cliente = new Clientes()
                    {
                        Empresa = txt_empresa.Text,
                        nif = txt_nif.Text,
                        PersonaContacto = txt_contacto.Text,
                        Direccion = txt_direccion.Text,
                        cpostal = txt_codigo.Text,
                        Poblacion = txt_poblacion.Text,
                        Provincia = txt_provincia.Text,
                        FechaAlta = dtp_fecha_alta.Value,
                        Activo = cbx_activo.Checked
                    };
                    context.Clientes.AddObject(cliente);
                    context.SaveChanges();
                    int idCliente = cliente.id;
    
                    telefonos telefono = new telefonos()
                    {
                        Cliente_id = idCliente,
                        titulo = lbl_telefono.Text,
                        telefono = txt_telefono.Text
                    };
                    context.telefonos.AddObject(telefono);
    
                    correos correo = new correos()
                    {
                        Cliente_id = idCliente,
                        titulo = lbl_email.Text,
                        email = txt_email.Text
                    };
                    context.correos.AddObject(correo);
    
                    context.SaveChanges();
                    DialogResult result = MessageBox.Show("Registro Guardado Correctamente!!", "Info ", MessageBoxButtons.OK);
    
               
                        foreach (Control c in this.Controls)
                        {
    
                            if (c is TextBox)
                            {
    
                                c.Text = "";
    
                                //Enfoco en el primer TextBox
    
                                this.txt_empresa.Focus();
    
                            }
                            
                        }
                            FormPrincipal.inizial();<-----aqui salta el error 
                        }else
                        {
                            MessageBox.Show("Esta empresa ya existe", "Info ", MessageBoxButtons.OK);
                        }
                   
                        
            }
    FormPrincipal tiene el valor de null


    martes, 18 de marzo de 2014 10:53
  • Que extraño... ¿?

    Si en el padre al crear el formulario hijo inicializas correctamente el valor de esta propiedad, no debería ser null.

    Pon un punto de interrupción al inicio del código 'btn_insertar_Click' en el formulario hijo y comprueba que vale FormPrincipal.

    Y ya puestos, intercepta el evento Form_Load del hijo y comprueba también el valor de la propiedad allí.

    L


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com

    • Marcado como respuesta erep68 martes, 18 de marzo de 2014 11:34
    martes, 18 de marzo de 2014 11:21
    Moderador
  • Ok ya me funciono.

    fallo mio perdona

    • Marcado como respuesta erep68 martes, 18 de marzo de 2014 11:34
    • Desmarcado como respuesta erep68 martes, 18 de marzo de 2014 11:34
    martes, 18 de marzo de 2014 11:34
  • Ok, genial :)

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-) Follow me on Twiiter: @lluisfranco Blog: lluisfranco.com

    martes, 18 de marzo de 2014 11:44
    Moderador