none
pasar datos de un datagridview a otro en c# RRS feed

  • Pregunta

  • hola, soy nuevo en esto. tanto en programar y esta pagina. pregunta es a siguiente que código es factible o se usa si yo tengo dos formularios en los dos esta un datagridview  y uno de ellos tiene 5 elementos o datos y quiero pasar todos esos 5 a otro datagridview que esta en el otro formulario sin seleccionar cada elemento a enviar la idea es enviar todo de una 

    el que estaba utilizando es el foreach, por fava ayuden 

    miércoles, 9 de octubre de 2019 17:45

Todas las respuestas

  • Hola aprendiz yato:

    Una de las posibles maneras, es en el form1, alimentar el datagrid con una colección a través de su propiedad datasource.

    Luego puedes sobrecargar el constructor del segundo formulario pasándole los datos del datagridview, realmente de su colección de datos asociada, y cargarlo en el datasource del 2 datagrid.

    Por ejemplo.

    public partial class FormularioNum1 : Form
    {
        DataTable dt;
        public FormularioNum1()
        {
            InitializeComponent();
    /* alimentamos un dataTable */
            this.dt = obtenerDatos();
    /* Cargamos el datagrid en el datatable */
            dataGridView1.DataSource = dt;
        }
    
        private DataTable obtenerDatos()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("columna1", typeof(string)));
            dt.Columns.Add(new DataColumn("columna2", typeof(string)));
            dt.Columns.Add(new DataColumn("columna3", typeof(string)));
            dt.Columns.Add(new DataColumn("columna4", typeof(string)));
    
            dt.Rows.Add("val1 col 1", "val col2", "val col3", "val col4");
            dt.Rows.Add("val2 col 1", "val col2", "val col3", "val col4");
            dt.Rows.Add("val3 col 1", "val col2", "val col3", "val col4");
            dt.Rows.Add("val4 col 1", "val col2", "val col3", "val col4");
    
            return dt;
        }
    
        private void btnAbrirForm2_Click(object sender, EventArgs e)
        {
    /* Llamamos al form2, a través de su constructor sobrecargado */
            FormularioNum2 form = new FormularioNum2(this.dt);
            form.ShowDialog();
            form.Close();
        }
    }

    Y el form 2

    public partial class FormularioNum2 : Form
    {
        public FormularioNum2()
        {
            InitializeComponent();
        }
    
        /* sobrecargamos el constructor del formulario para que si quien lo manda
         * crear le pasa como parametro un datatable, este directamente
         * alimente el datagridview1 de este form */
        public FormularioNum2(DataTable dt)
        {
            InitializeComponent();
            dataGridView1.DataSource = dt;
        }
    }
    Espero te ayude

    miércoles, 9 de octubre de 2019 18:06
  • lo probare entendi en un 60% 

    pero cabe recalcar que digamos en mi formulario 1 esta 5 elemonto que a medida de tiempo uno o el usuario agregar pero luego abre el segundo formulario 2 y quiere o quiero ver todos los datos que agregar osea los 5 en el  en el fomulario 2 claro hablando de datagridviews  

    el datagridview 1 de fom1 tiene las columnas de lo siguiente 

    codigo

    descripcion

    precio

    cantidad

    y pues se es logico mostrar todo eso sin seleccionar ninguna fila o columna en el datagridview 2 de form 2

    el sistema que estoy haciendo es basico de uno ventas  y el codigo que me ofrecio me parece interesante gracias lo estare utiliando de paso aprendo algo nuevo 

    muchas muchas gracias
    miércoles, 9 de octubre de 2019 18:12
  • Hola aprendiz yato:

    Entiendo que quieres decirme que tu usuario pueda seleccionar solo algunas filas del datagrid.

    En tu data del datagrid del form1 hay 10 filas, y el usuario ha marcado 5 como para pasar al form2.

    Haces un foreach sobre las filas y recoges las seleccionadas, metiéndolas en una nueva colección, y esa colección es la que le pasas al form2.

    miércoles, 9 de octubre de 2019 18:23
  • disculpe Javi Fernandez F. 

    DISCULPE por tantas preguntas pero me entendiò mal 

    mi usuario tiene dos formularios 

    fom1 que tiene un datagridvew1 

    donde tiene las columnas ( codigo,descripcion,precio,cantidad ) 

    en ese datagrid se va agregar los productos que se va vender al cliente ya sea 10  o  5 

    lo que se quiere que en el formulario2 que este el datagridview2 aparesca todos los datos o productos que este en el datagridview 1 del form1 

    sin necesidad de que el usuario seleccione lo alguna fila del datagrid 

    es como imprimir todo el datagrid view en otro form porfavor espero me haya entendido 

    ese es el problema que tengo, disculpe las molestias no se si me pued ayuda el codigo de arriba parece que ocupa esa necesidad lo ire probando luego pero quisas exista otra manera o quisas sea esa una ves mas espero me aya entendido y gracias de todas maneras 

    miércoles, 9 de octubre de 2019 18:41
  • Hola aprendiz yato.

    Eso es lo que hace el código, facilitado como ejemplo.

    miércoles, 9 de octubre de 2019 19:04
  • Hola

    Hay varias formas de conseguir lo que quieres, una de las formas es tal y como te lo explicaron anteriormente pasando los datos en el constructor.

    Otra forma seria que definieras variables a nivel de clase del Form1 y luego en el momento que queras llamar el Form2 y pasarle los datos capturas los datos de la fila seleccionada en las variables;

       public partial class Form1 : Form
       {
           public Form1()
           {
               InitializeComponent();
           }
    
           //variables que usaremos para pasar la informacion
           public static int id;
           public static string nombre;
           public static string pais;
    
    
    	//Tu demas codigo 
    
    
    
            //dependiendo en que evento queras enviar los datos arias algo asi
            DataGridViewRow row = dataGridView1.CurrentRow;
            if (row != null)
            {
                   //guardamos los datos de la fila en las variables
                   id = Convert.ToInt32(row.Cells[0].Value);
                   nombre = row.Cells[1].Value.ToString();
                   pais = row.Cells[2].Value.ToString();
                   Form2 ob = new Form2();
                   ob.Show();
            }
    
        }


    En tu Form2 solo recuperas los datos en el Load

           private void Form2_Load(object sender, EventArgs e)
           {
    	   DataTable dt = new DataTable();
     
               dt.Columns.Add("Id");
               dt.Columns.Add("Nombre");
               dt.Columns.Add("Pais");
               //cargar los datos con las variables del form principal
               DataRow row = dt.NewRow();
               row["Id"] = Form1.id ;
               row["Nombre"] = Form1.nombre ;
               row["Pais"] = Form1.pais ;
               dt.Rows.Add(row);
    
               dataGridView1.AutoGenerateColumns = false;
               dataGridView1.DataSource = dt;
           }

    Aquí explico como hacerlo

    PASAR INFORMACION ENTRE FORMULARIOS

    Saludos


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    miércoles, 9 de octubre de 2019 21:21
  • disculpe pero el codigo que me facilito lo que hace es crear un datagridview nuevo y extiende las columnas al datagridview que tenia solo quiero que seleccione todos los datos y pase al otro formulario similar como el codigo que me facilito pero con datos ya existentes 

     gracias.

    miércoles, 9 de octubre de 2019 21:34
  • Hola aprendiz yato:

    Todo depende de como has alimentado al dataGridView

    Si el dataGridView ha sido directamente alimentado desde una base de datos, tienes que iterar sobre sus columnas, para añadirlas al dataTable, y luego iterar sobre sus filas.

            DataTable dt2 = new DataTable();
            dt2.TableName = "MiTabla";
            foreach (DataGridViewColumn col in dataGridView1.Columns)
            {
                dt2.Columns.Add(col.DataPropertyName, col.ValueType);
            }
            foreach (DataGridViewRow gridRow in dataGridView1.Rows)
            {
                if (gridRow.IsNewRow)
                    continue;
                DataRow dtRow = dt.NewRow();
                for (int i1 = 0; i1 < dataGridView1.Columns.Count; i1++)
                    dtRow[i1] = (gridRow.Cells[i1].Value == null ? DBNull.Value : gridRow.Cells[i1].Value);
                dt2.Rows.Add(dtRow);
            }
            FormularioNum2 form = new FormularioNum2(dt2);
            form.ShowDialog();
            form.Close();
    Una vez tengas definido como se establece el origen de los datos de dataGridView1, entonces dependerá como lo trabajes para pasárselo a datagridview2

    jueves, 10 de octubre de 2019 1:29
  • el formulario lleno de productos es de la mano izquierda esa fue cargada de una base de datos pero cuando yo paso los productos que deseo vender al datagrid de la mano derecha eso depende de cada usuario el datagridview de la mano derecha donde sale la cantidad y precio no es cargada de base de datos es un listado comun y corriente

    como ven el de la mano izquierda es el datagridview lleno de los productos de mis base de datos el de la mano derecha  es un datagridview  sin ser cargado de base de datos es un listado de lo que voy a vender un carrito 

    eso se llenara a medida de como el usuario va vendiendo  lo que se requiere  esque todos los elementos sin ser o sin seleccionas fila pase al formulario que estare mostrando en la siguiente foto o imagen 

    jueves, 10 de octubre de 2019 2:39
  • formulario 2

    este formulario vendria ser el form 2 donde se quiere mostrar todo lo que el vendedor a estado poniendo en el carrito  pero ya probe dos codigos uno de ellos me mando la primera fila correra pero los otros eran duplicados de esta fila correcta gracias de antemano 

    • Propuesto como respuesta Pablo RubioModerator jueves, 10 de octubre de 2019 16:08
    • Votado como útil yato4503p lunes, 14 de octubre de 2019 22:23
    jueves, 10 de octubre de 2019 2:41
  •  

    form1 frm = new form1();

    /* dglistaP es el datagridview en el primer formulario*/

    foreach (DataGridViewRow fila in dgListaP.Rows) { f13.dglista2.Rows.Add(fila.Cells[0].Value, fila.Cells[1].Value, fila.Cells[2].Value, fila.Cells[3].Value); }

    /*dglista2 es el formulario quien resivira todo lo los datos del datagridview( dglistaP )tenia o tiene*/

    showDialog()

    muchas gracias a todos los que me ayudaron con los codigos pero aqui les dejo la que llegue a usar en el evento click

    gracias 







    • Editado yato4503p lunes, 14 de octubre de 2019 22:30
    lunes, 14 de octubre de 2019 22:27