none
Actualizar datos de grilla en memoria desde otro form RRS feed

  • Pregunta

  • Hola a tod@s.

    Uso Visual Studio 2019.

    Tengo en el form Padre un DatagridView con datos que NO SON de una base de datos. En dicho form Padre llamo a un form Hijo cargando los datos de la fila seleccionada y lo que necesito por favor es actualizar esas celdas del form Padre con la nueva información cambiada desde el form Hijo.

    gracias de antemano.

    Saludos.

    martes, 3 de diciembre de 2019 18:45

Respuestas

  • Listo!

    La solución fue la siguiente:

    Es necesario asignar el this que indicará que será el form PADRE:

            private void btnAgregarPartes_Click(object sender, EventArgs e)
            {
                PAgregarPartes _form = new PAgregarPartes();
                _form.ShowDialog(this); 
                
                if (dgvPartes.Rows.Count > 0)
                {
                    dgvPartes.CurrentRow.Selected = false;
                }
            }


    PRIMERO declaré mi interface en el form padre:

    public partial class PDenuncias : Form, IAddItem


    Luego invoco al método dentro de la interface:

            interface IAddItem
            {
                void AddNewItem(string codTipoParte, string tipoParte, string Pat, string Mat, string Nom, string codTipoDoc,
                string tipoDoc, string numDoc, string codInstMili, string instMili, string codGradoMili, string gradoMili, string accion);
            }


    Esté es mi método, que, o bien inserta un nuevo registro o bien actualiza:

            public void AddNewItem(string codTipoParte, string tipoParte, string Pat, string Mat, string Nom, string codTipoDoc,
                string tipoDoc, string numDoc, string codInstMili, string instMili, string codGradoMili, string gradoMili, string accion)
            {
                if (accion == "Corregir")
                {
                    dgvPartes[0, Modulo.pubFilaSeleccionada].Value = codTipoParte;
                    dgvPartes[1, Modulo.pubFilaSeleccionada].Value = tipoParte;
                    dgvPartes[2, Modulo.pubFilaSeleccionada].Value = Pat;
                    dgvPartes[3, Modulo.pubFilaSeleccionada].Value = Mat;
                    dgvPartes[4, Modulo.pubFilaSeleccionada].Value = Nom;
                    dgvPartes[5, Modulo.pubFilaSeleccionada].Value = codTipoDoc;
                    dgvPartes[6, Modulo.pubFilaSeleccionada].Value = tipoDoc;
                    dgvPartes[7, Modulo.pubFilaSeleccionada].Value = numDoc;
                    dgvPartes[8, Modulo.pubFilaSeleccionada].Value = codInstMili;
                    dgvPartes[9, Modulo.pubFilaSeleccionada].Value = instMili;
                    dgvPartes[10, Modulo.pubFilaSeleccionada].Value = codGradoMili;
                    dgvPartes[11, Modulo.pubFilaSeleccionada].Value = gradoMili;
                }
                else
                {
                    this.dgvPartes.Rows.Add(new[] { codTipoParte, tipoParte, Pat, Mat, Nom, codTipoDoc, tipoDoc, numDoc, codInstMili, instMili, codGradoMili, gradoMili });
                }            
            }


    Ya en el botón del form HIJO agregó el siguiente código:

    IAddItem parent = this.Owner as IAddItem;
                if (btnAgregar.Text == "Corregir")
                {
                    DialogResult dialogResult = MessageBox.Show("¿Seguro de corregir la parte?", "Confirmar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialogResult == DialogResult.Yes)
                    {
                        parent.AddNewItem(cboTipoParte.SelectedValue.ToString(), cboTipoParte.Text, txtApePaterno.Text.Trim(), txtApeMaterno.Text.Trim(), txtNombres.Text.Trim(), cboTipoDoc.SelectedValue.ToString(),
                        cboTipoDoc.Text, txtNumDoc.Text.Trim(), cboInstMilitar.SelectedValue.ToString(), cboInstMilitar.Text, cboGradoMilitar.SelectedValue.ToString(), cboGradoMilitar.Text, "Corregir");
                    }
                }
                else
                {
                    //IAddItem parent = this.Owner as IAddItem;
                    parent.AddNewItem(cboTipoParte.SelectedValue.ToString(), cboTipoParte.Text, txtApePaterno.Text.Trim(), txtApeMaterno.Text.Trim(), txtNombres.Text.Trim(), cboTipoDoc.SelectedValue.ToString(),
                        cboTipoDoc.Text, txtNumDoc.Text.Trim(), cboInstMilitar.SelectedValue.ToString(), cboInstMilitar.Text, cboGradoMilitar.SelectedValue.ToString(), cboGradoMilitar.Text,"");
                }
                
    
                iniciarVariables();
                this.Close();         

    Y listo! eso sería todo, gracias por todo ;)


    • Marcado como respuesta Miguel_Antonio miércoles, 4 de diciembre de 2019 14:09
    miércoles, 4 de diciembre de 2019 14:07

Todas las respuestas

  • Hola

    No importa que los datos no provengan de una base de datos, lo importante es que tengas acceso al objeto con el que estas llenando tu grid.

    Podrías usar este evento

    https://docs.microsoft.com/es-es/dotnet/api/system.windows.forms.datagridview.cellleave?view=netframework-4.8

    Este evento se dispara cuando sales de una celda, entonces, al momento de salir de la celda, lo que debes hacer es modificar el objeto que controle los datos del padre

    private void dataGridView1_CellLeave(object sender,
        DataGridViewCellEventArgs e
    )

    {
        dataGridView1[e.ColumnIndex, e.RowIndex].Style
            .SelectionBackColor = Color.Empty;
    }

    en vez de cambiar el color como lo hace el ejemplo, aquí es en donde va a actualizar los valores de la tabla padre

    saludos


    Ing. Carlos Monroy

    martes, 3 de diciembre de 2019 19:22
  • Hola.

    Gracias por tu respuesta. Pero, como le puedo entregar el valor del formulario hijo, recuerda que los nuevos datos estan en dicho form en controles Textbox y Combobox:

    Gracias.

    miércoles, 4 de diciembre de 2019 13:21
  • Listo!

    La solución fue la siguiente:

    Es necesario asignar el this que indicará que será el form PADRE:

            private void btnAgregarPartes_Click(object sender, EventArgs e)
            {
                PAgregarPartes _form = new PAgregarPartes();
                _form.ShowDialog(this); 
                
                if (dgvPartes.Rows.Count > 0)
                {
                    dgvPartes.CurrentRow.Selected = false;
                }
            }


    PRIMERO declaré mi interface en el form padre:

    public partial class PDenuncias : Form, IAddItem


    Luego invoco al método dentro de la interface:

            interface IAddItem
            {
                void AddNewItem(string codTipoParte, string tipoParte, string Pat, string Mat, string Nom, string codTipoDoc,
                string tipoDoc, string numDoc, string codInstMili, string instMili, string codGradoMili, string gradoMili, string accion);
            }


    Esté es mi método, que, o bien inserta un nuevo registro o bien actualiza:

            public void AddNewItem(string codTipoParte, string tipoParte, string Pat, string Mat, string Nom, string codTipoDoc,
                string tipoDoc, string numDoc, string codInstMili, string instMili, string codGradoMili, string gradoMili, string accion)
            {
                if (accion == "Corregir")
                {
                    dgvPartes[0, Modulo.pubFilaSeleccionada].Value = codTipoParte;
                    dgvPartes[1, Modulo.pubFilaSeleccionada].Value = tipoParte;
                    dgvPartes[2, Modulo.pubFilaSeleccionada].Value = Pat;
                    dgvPartes[3, Modulo.pubFilaSeleccionada].Value = Mat;
                    dgvPartes[4, Modulo.pubFilaSeleccionada].Value = Nom;
                    dgvPartes[5, Modulo.pubFilaSeleccionada].Value = codTipoDoc;
                    dgvPartes[6, Modulo.pubFilaSeleccionada].Value = tipoDoc;
                    dgvPartes[7, Modulo.pubFilaSeleccionada].Value = numDoc;
                    dgvPartes[8, Modulo.pubFilaSeleccionada].Value = codInstMili;
                    dgvPartes[9, Modulo.pubFilaSeleccionada].Value = instMili;
                    dgvPartes[10, Modulo.pubFilaSeleccionada].Value = codGradoMili;
                    dgvPartes[11, Modulo.pubFilaSeleccionada].Value = gradoMili;
                }
                else
                {
                    this.dgvPartes.Rows.Add(new[] { codTipoParte, tipoParte, Pat, Mat, Nom, codTipoDoc, tipoDoc, numDoc, codInstMili, instMili, codGradoMili, gradoMili });
                }            
            }


    Ya en el botón del form HIJO agregó el siguiente código:

    IAddItem parent = this.Owner as IAddItem;
                if (btnAgregar.Text == "Corregir")
                {
                    DialogResult dialogResult = MessageBox.Show("¿Seguro de corregir la parte?", "Confirmar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialogResult == DialogResult.Yes)
                    {
                        parent.AddNewItem(cboTipoParte.SelectedValue.ToString(), cboTipoParte.Text, txtApePaterno.Text.Trim(), txtApeMaterno.Text.Trim(), txtNombres.Text.Trim(), cboTipoDoc.SelectedValue.ToString(),
                        cboTipoDoc.Text, txtNumDoc.Text.Trim(), cboInstMilitar.SelectedValue.ToString(), cboInstMilitar.Text, cboGradoMilitar.SelectedValue.ToString(), cboGradoMilitar.Text, "Corregir");
                    }
                }
                else
                {
                    //IAddItem parent = this.Owner as IAddItem;
                    parent.AddNewItem(cboTipoParte.SelectedValue.ToString(), cboTipoParte.Text, txtApePaterno.Text.Trim(), txtApeMaterno.Text.Trim(), txtNombres.Text.Trim(), cboTipoDoc.SelectedValue.ToString(),
                        cboTipoDoc.Text, txtNumDoc.Text.Trim(), cboInstMilitar.SelectedValue.ToString(), cboInstMilitar.Text, cboGradoMilitar.SelectedValue.ToString(), cboGradoMilitar.Text,"");
                }
                
    
                iniciarVariables();
                this.Close();         

    Y listo! eso sería todo, gracias por todo ;)


    • Marcado como respuesta Miguel_Antonio miércoles, 4 de diciembre de 2019 14:09
    miércoles, 4 de diciembre de 2019 14:07