none
¿Como pasar todos los valores que contenga un datagridview a otro datagridview ?

    Pregunta

  • Que tal amigos, mi consulta es la siguiente:

    Como se podria pasar los valores de un datagridview a un segundo datagridview que esta vacio , como muestro en la siguiente imagen:

    Nota: Los valores deben de mantener la misma posición al momento de llenarse en el segundo datagridview, lo anterior se desea ejecutar desde un boton.

    saludos.


    lunes, 21 de noviembre de 2016 7:02

Respuestas

  • Jose Alrey,

    ¿El segundo DataGridView ya tiene agregado las columnas? De no ser así puedes hacer lo siguiente para copiar las columnas según el primer DataGridView:

    Private Sub btnCopiarColumnas_Click(sender As Object, e As EventArgs)
    	For Each col As DataGridViewColumn In DataGridView1.Columns
    		DataGridView2.Columns.Add(DirectCast(col.Clone(), DataGridViewColumn))
    	Next
    End Sub

    Para copiar los valores al segundo DataGridView:

    Private Sub btnClonarFilas_Click(sender As Object, e As EventArgs)
    	For Each row As DataGridViewRow In DataGridView1.Rows
    		Dim index As Integer = DataGridView2.Rows.Add(DirectCast(row.Clone(), DataGridViewRow))
    
    		For Each cell As DataGridViewCell In row.Cells
    			DataGridView2.Rows(index).Cells(cell.ColumnIndex).Value = cell.Value
    		Next
    	Next
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 21 de noviembre de 2016 15:13

Todas las respuestas

  • Depende de como llenes el DataGridView, normalmente debería ser suficiente con igualarlos:

    dataGridView2.DataSource = dataGridView1.DataSource

    lunes, 21 de noviembre de 2016 8:02
  • Hola anibal, el llenado lo hago mediante un combobox y posterior mente, ingreso los valores antes de pasarlos a l segundo grid.

     

    Private Sub combo1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles combo1.SelectedIndexChanged Dim fila As Integer, columna As Integer If combo1.SelectedIndex = 0 Then dgv.Rows.Clear() ElseIf combo1.SelectedIndex = 1 Then ' 2 x 2 'filas y columnas que tendra en grid1 fila = 2 columna = 2 'instancio los valores al grid datagridview1.RowCount = fila datagridview1.ColumnCount = columna ElseIf combo1.SelectedIndex = 2 Then ' 2 x 3

    fila = 2 columna = 3 datagridview1.RowCount = fila datagridview1.ColumnCount = columna

    ElseIf.....

    ........ End If ......


    Ahora, deseo pasar los valores que ingreso al primer grid a un segundo grid.
    lunes, 21 de noviembre de 2016 9:04
  • Jose Alrey,

    ¿El segundo DataGridView ya tiene agregado las columnas? De no ser así puedes hacer lo siguiente para copiar las columnas según el primer DataGridView:

    Private Sub btnCopiarColumnas_Click(sender As Object, e As EventArgs)
    	For Each col As DataGridViewColumn In DataGridView1.Columns
    		DataGridView2.Columns.Add(DirectCast(col.Clone(), DataGridViewColumn))
    	Next
    End Sub

    Para copiar los valores al segundo DataGridView:

    Private Sub btnClonarFilas_Click(sender As Object, e As EventArgs)
    	For Each row As DataGridViewRow In DataGridView1.Rows
    		Dim index As Integer = DataGridView2.Rows.Add(DirectCast(row.Clone(), DataGridViewRow))
    
    		For Each cell As DataGridViewCell In row.Cells
    			DataGridView2.Rows(index).Cells(cell.ColumnIndex).Value = cell.Value
    		Next
    	Next
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 21 de noviembre de 2016 15:13
  • Hola maestro Williams gracias por tu ayuda,  vieras que me  copia los valores al segundo DataGridView sin ningun problema, pero si le doy click de nuevo al boton me duplica las celdas, como podria limpiar el  segundo datagridview antes de copiar los valores para evitar la duplicaciòn.

    Intente aplicar el Datagridview2.rows.clear() pero siempre se duplican las celdas.

    Un saludo.

    lunes, 21 de noviembre de 2016 20:36
  • Jose Alrey,

    Lo que veo es que se vuelven a agregar las columnas, puedes hacer lo siguiente:

    private void btnClonarFilas_Click(object sender, EventArgs e)
    {
    	if (DataGridView2.Columns.Count == 0)
    	{
    		foreach (DataGridViewColumn col in DataGridView1.Columns)
    			DataGridView2.Columns.Add((DataGridViewColumn)col.Clone());
    	}
    
    	DataGridView2.Rows.Clear();
    
    	foreach (DataGridViewRow row in DataGridView1.Rows)
    	{
    		int index = DataGridView2.Rows.Add((DataGridViewRow)row.Clone());
    
    		foreach (DataGridViewCell cell in row.Cells)
    			DataGridView2.Rows[index].Cells[cell.ColumnIndex].Value = cell.Value;
    	}
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 21 de noviembre de 2016 22:24
  • Hola Williams, al seleccionar un tamaño del combo y llenar el datagridview1 me copia bien el datagridview, pero cuando cambio de tamaño y doy click al boton vieras  que tira la siguiente excepcion:  "La fila proporcionada contiene más celdas que columnas existentes." especificamente en esta linea:

    Private Sub btnClonarFilas_Click(sender As Object, e As EventArgs)
    	If DataGridView2.Columns.Count = 0 Then
    		For Each col As DataGridViewColumn In DataGridView1.Columns
    			DataGridView2.Columns.Add(DirectCast(col.Clone(), DataGridViewColumn))
    		Next
    	End If
    
    	DataGridView2.Rows.Clear()
    
    	For Each row As DataGridViewRow In DataGridView1.Rows
    		Dim index As Integer = DataGridView2.Rows.Add(DirectCast(row.Clone(), DataGridViewRow))
    
    		For Each cell As DataGridViewCell In row.Cells
    			DataGridView2.Rows(index).Cells(cell.ColumnIndex).Value = cell.Value
    		Next
    	Next
    End Sub
    

    saludos



    martes, 22 de noviembre de 2016 10:26