none
Como evitar que se copien filas repetidas de un DGV a otro DGV RRS feed

  • Pregunta

  • Hola, escribo para requerir de ayuda por favor, la situación es la siguiente:

    Tengo DOS DataGridView, en el DGV ORIGEN cargo una data de “N” cantidad de productos y tengo una columna de CheckBox donde selecciono las filas que quiero agregar en el DGV DESTINO que en principio se encuentra vacío. Como hago para comparar esas filas seleccionadas una por una del DGV ORIGEN para que no se repitan en el DGV DESTINO porque son varias búsquedas que se realizan para agregar muchos productos al DGV DESTINO y en una de esas búsquedas se pueden mostrar nuevamente algunos producto que ya se encuentran agregados en el DGV DESTINO, entonces de todos los seleccionados del DGV ORIGEN se copien al DGV DESTINO los que NO ESTÁN agregados y lo que ya han sido agregados NO SE COPIEN.

    Espero la pronta respuesta por favor y gracias de antemano.<o:p></o:p>

    jueves, 2 de abril de 2020 14:24

Respuestas

  • Hola:
    En un Form con 2 DGV y 1 Button, copia y pega el siguiente codigo

    Option Strict On
    Option Explicit On
    Public Class Form3
        Private moDataTable1 As New DataTable
        Private moDataTable2 As New DataTable
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
            DataGridView1.AllowUserToAddRows = False
            DataGridView2.AllowUserToAddRows = False
            'Añadimos las columnas.
            moDataTable1.Columns.Add(New DataColumn("Seleccion", GetType(Boolean)))
            moDataTable1.Columns.Add(New DataColumn("Nombre", GetType(String)))
            Me.DataGridView1.DataSource = moDataTable1
            lP_Añadir()
            '
            moDataTable2.Columns.Add(New DataColumn("Nombre", GetType(String)))
            Me.DataGridView2.DataSource = moDataTable2
        End Sub
        Private Sub lP_Añadir()
            Dim lDataRow As DataRow = moDataTable1.NewRow
            ' Añadimos los datos
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "PRIMERO"
            ' Agregamos el registros a la colección Rows
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "SEGUNDO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "TERCERO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "CUARTO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "QUINTO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "SEXTO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "SEPTIMO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "OCTAVO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "NOVENO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "DECIMO"
            moDataTable1.Rows.Add(lDataRow)
        End Sub
        Private Function lF_bNoExisteId(ByVal vsNombre As String) As Boolean
            Dim lbRetorno As Boolean = False
            Try
                Dim Consulta = From Valor In moDataTable2 Where Valor.Field(Of String)("Nombre") = vsNombre
                If Consulta.Count() = 0 Then
                    lbRetorno = True
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lF_bNoExiste", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return lbRetorno
        End Function

        Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
            Dim Lista As New List(Of DataRow)
            For Each drFila As DataRow In moDataTable1.Rows
                If Convert.ToBoolean(drFila("Seleccion")) = True Then
                    If lF_bNoExisteId(CStr(drFila("Nombre"))) = True Then
                        Lista.Add(drFila)
                    End If
                End If
            Next
            'Rellenar las filas del 1 que no esten en el 2
            Dim lDataRow As DataRow
            For Each Fila As DataRow In Lista
                lDataRow = moDataTable2.NewRow
                ' Añadimos la fila
                lDataRow.Item("Nombre") = Fila.Item("Nombre")
                moDataTable2.Rows.Add(lDataRow)
            Next
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta BogBer21 viernes, 24 de abril de 2020 19:29
    viernes, 3 de abril de 2020 10:43

Todas las respuestas

  • Hola BogBer21,

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, vamos a darte seguimiento e investigaremos para buscar la mejor respuesta para ti.

     

    Gracias por usar los foros de MSDN.

     

    Eric Ruiz

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 2 de abril de 2020 15:22
    Moderador
  • Estoy trabajando en visual studios con visual basic, se me paso por alto colocarlo
    jueves, 2 de abril de 2020 15:38
  • Hola:
    En un Form con 2 DGV y 1 Button, copia y pega el siguiente codigo

    Option Strict On
    Option Explicit On
    Public Class Form3
        Private moDataTable1 As New DataTable
        Private moDataTable2 As New DataTable
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
            DataGridView1.AllowUserToAddRows = False
            DataGridView2.AllowUserToAddRows = False
            'Añadimos las columnas.
            moDataTable1.Columns.Add(New DataColumn("Seleccion", GetType(Boolean)))
            moDataTable1.Columns.Add(New DataColumn("Nombre", GetType(String)))
            Me.DataGridView1.DataSource = moDataTable1
            lP_Añadir()
            '
            moDataTable2.Columns.Add(New DataColumn("Nombre", GetType(String)))
            Me.DataGridView2.DataSource = moDataTable2
        End Sub
        Private Sub lP_Añadir()
            Dim lDataRow As DataRow = moDataTable1.NewRow
            ' Añadimos los datos
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "PRIMERO"
            ' Agregamos el registros a la colección Rows
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "SEGUNDO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "TERCERO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "CUARTO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "QUINTO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "SEXTO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "SEPTIMO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "OCTAVO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "NOVENO"
            moDataTable1.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable1.NewRow
            lDataRow.Item("Seleccion") = False
            lDataRow.Item("Nombre") = "DECIMO"
            moDataTable1.Rows.Add(lDataRow)
        End Sub
        Private Function lF_bNoExisteId(ByVal vsNombre As String) As Boolean
            Dim lbRetorno As Boolean = False
            Try
                Dim Consulta = From Valor In moDataTable2 Where Valor.Field(Of String)("Nombre") = vsNombre
                If Consulta.Count() = 0 Then
                    lbRetorno = True
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lF_bNoExiste", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return lbRetorno
        End Function

        Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
            Dim Lista As New List(Of DataRow)
            For Each drFila As DataRow In moDataTable1.Rows
                If Convert.ToBoolean(drFila("Seleccion")) = True Then
                    If lF_bNoExisteId(CStr(drFila("Nombre"))) = True Then
                        Lista.Add(drFila)
                    End If
                End If
            Next
            'Rellenar las filas del 1 que no esten en el 2
            Dim lDataRow As DataRow
            For Each Fila As DataRow In Lista
                lDataRow = moDataTable2.NewRow
                ' Añadimos la fila
                lDataRow.Item("Nombre") = Fila.Item("Nombre")
                moDataTable2.Rows.Add(lDataRow)
            Next
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta BogBer21 viernes, 24 de abril de 2020 19:29
    viernes, 3 de abril de 2020 10:43
  • Hola J. Carlos Herrero

     

    ¿Alguna actualización sobre la consulta realizada? ¿Alguna de las respuestas proporcionadas te ayudó?

     

    Espero tu respuesta.

     

    Gracias por usar los foros de MSDN.

     

     

    Luis Diego Mora

    lunes, 6 de abril de 2020 21:55
    Moderador