Copiar o mover filas de un DataGridView a otro.

Atendiendo a la consulta de Javier..

Hola Pep Lluis, he leído varias veces las soluciones que das en los diferentes espacios y foros, y quizá esta pregunta te la hayan hecho ya, pero la verdad ando algo atorado con este problemilla... ahí va :
La idea es tener 2 datagrid’s : el1er Datagrid : Muestra el resultado de una búsqueda, de este datagrid deben seleccionar 1 o varios registros y deberán pasarse al 2do Datagrid : Que debe mostrar los registros seleccionados en el 1er datagrid.Si paso un registro del Datagrid 1 al 2, el registro desaparecerá del 1 y aparecerá en el 2, y viceversa.

____

DgvToDgv

Supongo que existen diversas formas de conseguir lo mismo y sin duda más sofisticadas pero como siempre buscando la simplicidad y en pro de la comprensión os muestro el siguiente ejemplo evitando a exprofeso estructuras complejas difíciles de seguir.

 Para poder tener visión sobre dos maneras distintas de hacerlo, he decido mostrar el primer DGV unido a una estructura de datos y el segundo “clonado” pero sin estar enlazado a ninguna BD, por lo tanto deberéis situar el ejemplo como un punto de partida, en ningún caso como una solución concreta y mucho menos pensando en dos DGV’s enlazados a datos y con relaciones… pues la cosa puede complicarse ligeramente y como os digo no es el propósito ni alcance de este corto.

Tampoco contempla en qué orden y como se ordenan los registros o filas que se copian o mueven de un lado a otro J, también he obviado procesar la excepciones para concentrarnos solo en el código que puede interesarnos… por lo que no está libre de ‘errores’.

Para utilizar este código tienes que crear un nuevo proyecto “Windows Form Application” desde el menú de Visual Basic y arrastrar y soltar dos DGV’s, dos CheckBox y dos Botones de la ventana de herramientas, a continuación solo debes copiar y pegar este código substituyendo el generado por el ‘wizard’. También debes crear una BD de Access en la carpeta ‘debug’ conteniendo la tabla de la BD referenciada en la cadena de conexión, para poder leer tanto código comodamente,.me he tomado la libertad de eliminar las firmas de las funciones, por lo que tendréis de substituir el “(….)” Por el ‘ByVal sender As System.Object, ByVal e As System.EventArgs’ correspondiente en VB2005 o dejarlo simplemente () en VB2008.

Espero que os sea útil,
Saludos!
Pep Lluis,

Imports System.Data.OleDb

Public Class Form1
    '
    'Definir objectos de conexion a base de datos
    Private MiConexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=TuBd.mdb;")
    Private MiAdaptador As New OleDbDataAdapter("SELECT * FROM TuTabla", MiConexion)
    Private MiDataSet As New DataSet()
    Private MiEnlazador As New BindingSource

    '
    'tareas en tiempo de carga de la aplicación
    Private Sub Form1_Load(….) Handles MyBase.Load
        'Abrir conexion y llenar el dataset
        MiConexion.Open()
        MiAdaptador.Fill(MiDataSet)
        Dim commandbuilder As New OleDb.OleDbCommandBuilder(Me.MiAdaptador)
        'Asignamos el origen de datos para del DataGridView
        Me.DataGridView1.DataSource = MiDataSet.Tables(0)
        'Cerrar la conexión
        MiConexion.Close()
        'Clonar o...
        'Reproducir la estructura del 1er dataGrid en DataGridView2
        Me.DataGridView2.ColumnCount = Me.DataGridView1.ColumnCount
        For x = 0 As Integer To Me.DataGridView1.ColumnCount – 1
            Me.DataGridView2.Columns(x).Name = Me.DataGridView1.Columns(x).Name
            Me.DataGridView2.Columns(x).HeaderText = Me.DataGridView1.Columns(x).HeaderText
        Next
        Me.CheckBox1.Checked = True     'por defecto al iniciar seleccionamos
        Me.CheckBox2.Checked = False    'Operaciones origen DGV1, destino DGV2
    End Sub
    '
    'Boton Copiar
    Private Sub Btn_Copiar_Click(….) Handles Btn_Copiar.Click
        'determinar la direccion de copiar entre DGV1 y 2
        If CheckBox1.Checked Then

            'Comprobar que existen columnas seleccionadas
            If DataGridView1.SelectedRows.Count > 0 Then
                CopiarSeleccionadosDGV1aDGV2()
            End If
        Else
            If DataGridView2.SelectedRows.Count > 0 Then
                CopiarSeleccionadosDGV2aDGV1()
            End If
        End If
    End Sub
    '
    'Boton Mover
    Private Sub Btn_Mover_Click(….) Handles Btn_Mover.Click
        'determinar la direccion de mover entre DGV1 y 2
        If CheckBox1.Checked Then
            'Comprobar que existen columnas seleccionadas
            If DataGridView1.SelectedRows.Count > 0 Then
                MoverSeleccionadosDGV1aDGV2()
            End If
        Else
            If DataGridView2.SelectedRows.Count > 0 Then
                MoverSeleccionadosDGV2aDGV1()
            End If
        End If
    End Sub
    '
    'Copiar los elementos seleccionados del DGV1 al DGV2
    Sub CopiarSeleccionadosDGV1aDGV2()
        For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
            Me.DataGridView2.Rows.Add(ObtenerValoresFila(Seleccion))
        Next
        DataGridView1.ClearSelection()
    End Sub
    '
    'Copiar los elementos seleccionados del DGV1 al DGV2
    Sub CopiarSeleccionadosDGV2aDGV1()
        For Each Seleccion As DataGridViewRow In DataGridView2.SelectedRows
            Me.MiDataSet.Tables(0).Rows.Add(ObtenerValoresFila(Seleccion))
        Next
        DataGridView2.ClearSelection()
    End Sub
    '
    'Mover los elementos seleccionados del DGV1 al DGV2
    Sub MoverSeleccionadosDGV1aDGV2()
        'Para cada fila seleccionada
        For Each Seleccion As DataGridViewRow In DataGridView1.SelectedRows
            'Añadir los valores obtenidos de la fila seleccionada
            'al segundo datagridview
            Me.DataGridView2.Rows.Add(ObtenerValoresFila(Seleccion))
            'eliminar la fila del DataGridView origen
            DataGridView1.Rows.Remove(Seleccion)
        Next
    End Sub
    '
    'Mover los elementos seleccionados del DGV1 al DGV2
    Sub MoverSeleccionadosDGV2aDGV1()
        'Para cada fila seleccionada
        For Each Seleccion As DataGridViewRow In DataGridView2.SelectedRows
            'Añadir los valores obtenidos de la fila seleccionada
            'al segundo datagridview
            Me.MiDataSet.Tables(0).Rows.Add(ObtenerValoresFila(Seleccion))
            'eliminar la fila del DataGridView origen

            DataGridView2.Rows.Remove(Seleccion)
        Next
    End Sub
    '
    'Obtener el contenido de la fila en un string()
    'con el proposito de copiarlo o moverlo
    '
    'Recibe el 'row' y retorna su contenido en un array tipo string
    Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
        'Dimensionar el array al tamaño de columnas del DGV
        Dim Contenido(Me.DataGridView1.ColumnCount - 1) As String
        'Rellenar el contenido con el valor de las celdas de la fila
        For Ndx As Integer = 0 To Contenido.Length – 1
            Contenido(Ndx) = fila.Cells(Ndx).Value
        Next
        Return Contenido
    End Function
    '
    'Seleccionar la direccion en que se efectuara la copia
    Private Sub CheckBox1_CheckedChanged(….) Handles CheckBox1.CheckedChanged
        CheckBox2.Checked = Not CheckBox1.Checked
    End Sub
    Private Sub CheckBox2_CheckedChanged(….) Handles CheckBox2.CheckedChanged
        CheckBox1.Checked = Not CheckBox2.Checked
    End Sub
End
Class

Published Fri, Sep 19 2008 4:54 by peplluis
Filed under:

Comments

# re: Copiar o mover filas de un DataGridView a otro.

Friday, September 19, 2008 8:20 AM by Raul Bencosme

Si es posible te lo agradeceria sobremanera , es que soy medio novato en el area de los datagridview y no se como adaptarlo a mi caso, en caso de que puedas ayudarme como te contacto? para que veas mi estructura y codigo?

# re: Copiar o mover filas de un DataGridView a otro.

Friday, September 19, 2008 8:55 AM by peplluis

Raul,

Puedes contactar cuando gustes usando la opcion [Contact] en [This Blog]

Espero tus noticias,

Pep Lluis,

# re: Copiar o mover filas de un DataGridView a otro.

Friday, September 19, 2008 9:28 AM by Javier MMM

Muchas gracias Pep Lluis, me ha sido de mucha ayuda el código que me enviaste... Hasta pronto  

# re: Copiar o mover filas de un DataGridView a otro.

Wednesday, November 05, 2008 5:16 PM by roy

me podria decir como se declara la variable x porque me salen errores y me sale otro error en

For Ndx As Integer = 0 To Contenido.Length – 1

me dice que el caracter no es valido

# re: Copiar o mover filas de un DataGridView a otro.

Wednesday, November 12, 2008 2:23 AM by peplluis

Ok, Supongo que estas utilizando una version anterior a Visual Studio 2005, Tan solo necesitas añadir Dim x as integer antes de utilizarla y el el caso del For...

Dim Ndx as Integer

For Ndx = 0 to Contenido.Length -1 ...

Saludos,

Pep Lluis,

# re: Copiar o mover filas de un tableadapter a otro.

Wednesday, April 22, 2009 5:56 PM by Florecita

Hola, tengo un problema con los tableadapter`s lo que pasa que no se como moverme entren los registros y copiarlo y enviarlos a otra tabla, les agradeseria mucho que me ayudaran

Gracias xD

# re: Copiar o mover filas de un DataGridView a otro.

Friday, April 24, 2009 4:23 AM by peplluis

Hola Florecita,

Mira a ver si este ejemplo te sirve :

msmvps.com/.../guardar-el-resultado-de-una-vista-en-una-tabla.aspx

En caso contrario puedes contactar conmigo y explicarmelo en detalle.

Pep Lluis,

# re: Copiar o mover filas de un DataGridView a otro.

Tuesday, June 23, 2009 10:41 AM by Victor

Gracias, excelente!

# re: Copiar o mover filas de un DataGridView a otro.

Monday, August 31, 2009 2:34 PM by Alfonso

Que tal muy buen codigo pero me podrias ayudar necesito esta misma opcion pero en C# no se si me podrias ayudar por que ya intente usando la logica de este ejemplo pero no me funciona gracias

# re: Copiar o mover filas de un DataGridView a otro.

Tuesday, September 01, 2009 8:56 AM by peplluis

Hola Alfonso,

Acabo de llegar de vacaciones y en estos momentos no ando demasiado bien de tiempo. Te propongo hacerlo al rebes... contacta conmigo a traves de la opcion [Contact] y una vez en conversacion me envias el codigo que has conseguido y yo termino de ajustarlo para que funcione igual que el ejemplo.

Espero tus noticias,

Saludos,

Pep Lluis,

# re: Copiar o mover filas de un DataGridView a otro.

Wednesday, September 02, 2009 10:38 AM by Vovintherion

Saludos.

gracias por tu aporte  me fue muy util. si estan enlazando datos del Datagridview les producira un error en momento de ejecucion por lo anterior.

pueden agregar las filas a una datatable que es el datasource del datagrid.

# operaciones con gridview vb 9

Wednesday, September 23, 2009 11:59 AM by leopoldo silva

Que tal PepLuis , me gustaria que me auxiliaras con unos problemas que tengo al intentar hacer operaciones entre columnas con un gridview , mi correo es pololeon10 de hotmail , te agradezco la ayuda de antemano , desde chihuahua, mexico

# re: Copiar o mover filas de un DataGridView a otro.

Wednesday, September 23, 2009 12:26 PM by peplluis

Hola Sr. Silva,

Le agradecere que utilice la opcion de [Contact] al inicio de esta pagina. De esa forma podremos mantener una conversacion agil.

Esperando sus noticias, reciba un cordial Saludo,

Pep Lluis,

# Copiar o mover filas de un DataGridView a otro.

Thursday, April 08, 2010 4:54 PM by Glanorca

buenas revisando su en la red encontre su blog muy buena explicación y ahora aprovechando la ocasion le hago una pregunta como seria el caso que no quiero copiar datos ente datagridview si no que quiero eliminar datos de un datagridview y que alñ mismo tiempo se eliminen de la bd al marcarlos con el checkbox y apretando un boton??? por si aca estoy trabajando con vb.net 2005 y bd access gracias

# re: Copiar o mover filas de un DataGridView a otro.

Saturday, April 17, 2010 4:48 AM by Jesus

PepLluis, yo utilizo un codigo muy similar para importar un txt al datagridview1

mi duda es como puedo hacer para desglozar en varias columnas sin usar caracter especiales solo por longitud de caracteres, el archivo que importo es una cantidad de filas con numeros muyy larga. Uso VS05.Slds.Thanks.

# re: Copiar o mover filas de un DataGridView a otro.

Friday, April 23, 2010 5:32 AM by peplluis

Hola Jesus,

Conoces esta expresion?

       Dim Trama As String = "Campo 1,Campo 2,Campo 3"

       Dim Elementos As String() = Trama.Split(",")

Creo que puede solucinarte la duda,

Pep Lluis,

# re: Copiar o mover filas de un DataGridView a otro.

Friday, April 23, 2010 5:36 AM by peplluis

Respondiendo a Glanorca,

Deberias usar alguno de los ejemplos que enlazan del DataGrid a la Bd utilizando un binding que hace el 'update' cuando se agregan/eliminan registros del mismo.

Saludos,

Pep Lluis,

# re: Copiar o mover filas de un DataGridView a otro.

Friday, July 22, 2011 1:08 AM by Jocelyn

Este codigo me puede servir para aplicarlo en vb6, lo que necesito es algo asi, pero te explico, tengo un formulario con 2 datagrid, los dos estan enlazados a una tabla cada uno las cuales pues son diferentes, ahora la cuestion es que yo quiero elegir de esos dos data grid algun registro y copiarlo ya sea a otro datagrid para despues guardarlos en otra tabla diferente y poder imprimir un informe de esos registros.

Si fueras tan amable de ayudarme estoy atorada solo con eso y llevo dias buscando y investigando como hacerlo y no encuentro como, si me puedes ayudar con un ejemplo o algo pareceido, te lo agradecere.

saludos

# re: Copiar o mover filas de un DataGridView a otro.

Saturday, November 12, 2011 1:00 PM by ana

hola, he leido este codigo y me ha sido de muchisima ayuda, solo que tengo un problemita, tal vez sea algo suupr tonto pro no lo puedo hacer, yo necesito pasar una fila seleccionada de un datagrid a otro como tu lo haces, pero los datadgrid estan en diferentes forms, asi que cuando intento pasar la fila que seleccione no me aparece nadaa!!, ya lo hice con 2 datagrid en la misma form y no hay problema, pero con los grid en diferente form el segundo grid sale vacio, espro k me puedas ayudar a corregir esto, muchisismas gracias :) estoy en vb.net 2008

# re: Copiar o mover filas de un DataGridView a otro.

Saturday, November 26, 2011 6:28 PM by pablo

Gracias ..

# re: Copiar o mover filas de un DataGridView a otro.

Sunday, November 27, 2011 3:53 AM by peplluis

Hola Ana,

Deberias usar un 'Modulo' Vb o Clase statica C#, para intercambiar el DataRow entre ambos.

En todo caso puedes contactarme o dirigirte a los foros para detallar un ejemplo concreto.

Saludos,

PepLluis,

# re: Copiar o mover filas de un DataGridView a otro.

Thursday, February 16, 2012 10:03 AM by Carolina

hola PepLluis, en mi caso es muy pareceido al planteado inicialmente pero el paso de informacion de un gridview a otro es a travez de la validacion de  un textbox ya q es un dato capturado ,la finalidad es q una vez capturado lo busque en el GridView1 y lo pase al Gridview2.

Agradezco muco de tu ayuda ya que nada q ñpgro dar con la solucion.

# re: Copiar o mover filas de un DataGridView a otro.

Thursday, December 06, 2012 2:11 PM by santival

hola! pepe luis

es bien sabido o he visto, que es mejor usar list que vectores. en la parte de tu codigo:

   Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()

       'Dimensionar el array al tamaño de columnas del DGV

       Dim Contenido(Me.DataGridView1.ColumnCount - 1) As String

       'Rellenar el contenido con el valor de las celdas de la fila

       For Ndx As Integer = 0 To Contenido.Length – 1

           Contenido(Ndx) = fila.Cells(Ndx).Value

       Next

       Return Contenido

   End Function

trato de hacer esto con list:

       private List<DataGridViewRow> ObtenerValoresFila()

       {

           List<Producto> Contenido = new List<this.dtgPedidosDetallados.ColumnCount>();

       for (int i = 0; i < list.Count; i++)

       {

           Contenido.Add[i]=fila.Cells[i].Value.ToString();

       }

           return Contenido;

       }

Me podrias iluminar un poco, conozco poco de c# y de visualBasic conoci el 6 espero tu respuesta Gracias!!

# re: Copiar o mover filas de un DataGridView a otro.

Wednesday, April 24, 2013 2:45 PM by memo

Hola PepLluis, que pones en la parte (Obtenervalores fila, (seleccion)) en esta parte de tu código ya que me aparece que no he declarodo la variable.

'Copiar los elementos seleccionados del DGV1 al DGV2

   Sub CopiarSeleccionadosDGV1aDGV2()

       For Each Seleccion As DataGridViewRow In DgvMenu.SelectedRows

           Me.DgvSalida.Rows.Add(ObtenerValoresFila(Seleccion))

       Next

       DgvMenu.ClearSelection()

   End Sub

mi correo es memocaceres@gmail.com

# re: Copiar o mover filas de un DataGridView a otro.

Tuesday, May 07, 2013 12:28 PM by peplluis

Hola Memo,

Es solo un ejemplo y debe implementarse cubriendo diferentes escenarios... el error es porque debes seleccionar una fila del DGV antes de copiar/mover..etc.

ObtenerValoresFila(Seleccion) representa el objeto que contiene las filas seleccionadas.

Espero que esto ayude,

PepLluis,

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above: