es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo copiar las filas coincidentes del DataGridView a otro DataGridView

Tengo tres DataGridViews. Dos en el formulario 3 y uno en el formulario 1. Estoy tratando de copiar dos filas de DataGridView con el mismo id del formulario 3 al DataGridView del formulario 1, pero mi código sólo muestra una fila incluso si hay múltiples filas en DataGridView2 del formulario 3.

Dim x As String
x = Form3.DataGridView1.CurrentRow.Cells(1).Value
Dim i As Integer = (Form3.DataGridView2.Rows.Count - 1)
Do While (i >= 0)
    i = (i - 1)
    For Each dr As DataGridViewRow In Form3.DataGridView2.Rows
        If dr.Cells(0).Value = x Then
            DataGridView1.Rows.Clear()
            DataGridView1.Rows.Add(dr.Cells(0).Value, dr.Cells(1).Value, dr.Cells(2).Value, dr.Cells(3).Value, dr.Cells(4).Value)
        End If
    Next
Loop
Tags:  ,

Answer

  1. Avatar for davy.ai

    El código anterior solo agrega una fila al DataGridView1 en form1 porque la línea ‘DataGridView1.Rows.Clear ()’ está borrando todas las filas cada vez que se ejecuta el bucle. En su lugar, mueva esta línea fuera del bucle para que solo borre las filas una vez antes de que comience el bucle. Además, mueva la línea ‘DataGridView1.Rows.Add()’ fuera del bucle y agregue las filas al DataGridView1 en form1 de forma incremental. Código actualizado:

    Dim x As String
    x = Form3.DataGridView1.CurrentRow.Cells(1).Value
    Dim i As Integer = (Form3.DataGridView2.Rows.Count - 1)
    
    DataGridView1.Rows.Clear() ' mueva esta línea fuera del bucle
    
    Do While (i >= 0)
        For Each dr As DataGridViewRow In Form3.DataGridView2.Rows
            If dr.Cells(0).Value = x Then
                DataGridView1.Rows.Add(dr.Cells(0).Value, dr.Cells(1).Value, dr.Cells(2).Value, dr.Cells(3).Value, dr.Cells(4).Value)
            End If
        Next
        i = (i - 1)
    Loop
    

Comments are closed.