none
Problema al pasar filas de un DataGridView a otro RRS feed

  • Pregunta

  • Hola amigos, espero que todos estén bien. Mi problema es simple, en mi aplicación tengo dos DataGridView, cada uno tiene la misma estructura que el otro, me refiero a número de campos. Uno de esos campos, es un checkbox, la idea es que yo pueda marcar los registros que quiera del DataGridView de origen y que esos registros marcados, se pasen al DataGridView de destino.

    El código que utilizo es el siguiente:

    private void copyMySQL_Click(object sender, EventArgs e)
            {
    List<DataGridViewRow> rowSelected = new List<DataGridViewRow>();
    
                foreach (DataGridViewRow item in gridRepMySQL.Rows)
                {
                    DataGridViewCheckBoxCell cellSelection = item.Cells[0] as DataGridViewCheckBoxCell;
    
                    if (Convert.ToBoolean(cellSelection.Value))
                    {
                        rowSelected.Add(item);
                    }
                }
    
                foreach (DataGridViewRow item in rowSelected)
                {
                    gridAtributosDim.Rows.Add(new object[] { false, item.Cells[1].Value, item.Cells[2].Value });
                    gridRepMySQL.Rows.Remove(item);
                }
            }

    Este código lo encontré en el blog de Leandro, el asunto es que nunca se "copian" el total de filas marcadas, es decir, si marco 3, sólo se copian 2, si marco 2, sólo se copia 1, y si marco 1, no se copia nada. No sé a qué se deba, si hay que mover alguna propiedad del DataGridView o algo por ahí.

    Por su atención gracias

    viernes, 11 de mayo de 2018 20:05

Todas las respuestas

  • Pues eso de trabajar las grillas en Windows Forms a través de objetos de fila no es algo que yo haga o recomiende.  Yo siempre trabajo las grillas vinculadas a una colección de objetos.  Como sus objetos tienen una casilla de texto, mis objetos tendrían una propiedad Booleana.

    Luego en vez de recorrer las filas de la grilla, recorrería la colección que es fuente de la primera grilla, y simplemente removería los objetos con la propiedaad Booleana en true de la colección fuente de esta primera grilla y los agregaría a la colección fuente de la segunda grilla.  El hacer esto automáticamente actualizaría ambas grillas.  O sea, todo se haría en un único bucle.


    Jose R. MCP
    Code Samples

    lunes, 14 de mayo de 2018 2:22
    Moderador
  • Hola , podrías revisar

    C# - [DataGridView] – Pasar Registros entre Grillas


    Votar es agradecer.
    Saludos.
    Lima-Perú

    lunes, 14 de mayo de 2018 3:19
  • Me tomé el tiempo de hacer un pequeño proyecto de prueba que demuestra el uso de colecciones y lo sencillo que es cuando se usan las clases correctas para la plataforma correcta.

    Proyecto de ejemplo


    Jose R. MCP
    Code Samples

    lunes, 14 de mayo de 2018 4:09
    Moderador
  • Aunque muy tarde, pero el asunto es que estaba usando un botón de una librería de diseño "bunifu"...el problema era el botón, usé un botón nativo y todo funcionó bien. Hay que tener cuidado con los controles personalizados que hacen otros usuarios.
    viernes, 6 de julio de 2018 1:09
  • Para un futuro, puede revisar mis proyectos de GitHub (el enlace está en mi firma).  Su pregunta me inspiró para crear la bibliotecta wj.DataBinding para realizar este tipo de cosas fácilmente.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    viernes, 6 de julio de 2018 2:05
    Moderador