none
Pasar datos de un datagrid a otro ubicado en otro form RRS feed

  • Pregunta

  • Hola necesito que me ayuden. Estoy desarollando una aplicacion sobre control de stock y necesito pasar informacion de un form llamado FormCarro el cual contiene un datagridview llamado GridCarro a otro form llamado Ventas que contiene otro datagridview llamado cajaDataGridView.

    //Este codigo va en el button cargar del FormCarro

                foreach (DataGridViewRow row in GridCarro.SelectedRows)
                {

                    //CAPTURAMOS VALOR DE LA FILA SELECCIONADA DG FORM2
                    string A = this.GridCarro.CurrentRow.Cells[0].Value.ToString();
                    string B = this.GridCarro.CurrentRow.Cells[1].Value.ToString();

                    //PASAMOS VAMOSRES DE FORM2  A FORM1
                    
                    Ventas dato = new Ventas();
                    
                    foreach (Form frm in Application.OpenForms)
                    {
                        if (frm.Name == "Ventas")
                        {
                            dato = (Ventas)frm;
                            dato.cajaDataGridView.Rows.Add(A, B);

                            this.Close();
                            break;
                        }
                    }

                }

    //Y este codigo en el form ventas

    //Abrimos el  FormCarro
                FormCarro f = new FormCarro();
                f.Show();

    El error que me sale al ejecutar este codigo es: System.InvalidOperationException: 'No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos.'
    martes, 21 de enero de 2020 17:57

Todas las respuestas

  • Si el DataGrid lo has enlazado a datos (a un DataSource) no puedes añadir filas con Rows.Add()

    Debes añadir los datos al DataTable correspondiente :

    if (frm.Name == "Ventas")
    {
    dato = (Ventas)frm;

    Dim dt As DataTable = DirectCast(dato.cajaDataGridView.DataSource, DataTable)
    Dim rowNew As Datarow = dt.NewRow()

    'Aquí asignas los campos al DataRow
    rowNew("Campo1") = A
    rowNew("Campo2") = B

    dt.Rows.Add(rowNew)

    dato.cajaDataGridView.DataSource = dt

    this.Close();
    break;
    }


    Saludos, Javier J

    martes, 21 de enero de 2020 18:24
  • hola

    >>No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos

    Si asigaste el DataSource al grid no puedes usar el Items.Add() deberias recuperar los datos originales y agregarlos al origen de datos

    o sea recuperas usando

    DataTable dt = DataGridView1.DataSource as DataTable;
    
    if(dt != null){
    
       //aqui agregas los datos al datatable
    
    }
    
    //luego lo vuelves asignar
    
    DataGridView1.DataSource = dt;


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 21 de enero de 2020 18:48
  • hola Javier

    creo que mezclaste codigo c# con vb.net

    Estas lineas

    Dim dt As DataTable = DirectCast(dato.cajaDataGridView.DataSource, DataTable)
    Dim rowNew As Datarow = dt.NewRow()

    serian

    DataTable dt = (DataTable)dato.cajaDataGridView.DataSource;

    DataRow rowNew = dt.NewRow();

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 21 de enero de 2020 18:50
  • Hola Joaco

    Si te es más cómodo o necesitas editar los DataGridView, podes trabajar sin enlazar, al cargar copias las filas a los DGV, y luego guardas las modificaciones de los DGV al DataTable o a la base de datos.

    Depende del gusto o lo que le sea más cómodo a cada uno.

    Saludos

    Pablo

    martes, 21 de enero de 2020 22:58
  • Muchas gracias por tu respuesta, te comento que estoy programando en c# y con una base de datos en acces. Probe tu codigo con las correctas adaptaciones al lenguaje C# y me sale el siguiente error:

    System.InvalidCastException: 'No se puede convertir un objeto de tipo 'System.Windows.Forms.BindingSource' al tipo 'System.Data.DataTable

    miércoles, 22 de enero de 2020 19:12
  • hola

    >>No se puede convertir un objeto de tipo 'System.Windows.Forms.BindingSource' al tipo 'System.Data.DataTable

    Eso es porque usaste un origen de datos diferente

    Vas a tener que agregar los datos al origen de datos del bindingsource, pero no se cual es el que agregas ni como vinculas los datos

    BindingSource bs = DataGridView1.DataSource as BindingSource; if(bs!= null){ DataTable dt = bs.DataSource as DataTable;

    if(dt != null){

    //aqui agregas los datos

    } } //luego lo vuelves asignar DataGridView1.DataSource = dt;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de enero de 2020 19:40