none
Copiar la Fila entera en otra Fila Nueva datagridview RRS feed

  • Pregunta

  • Buenos Días Amigos

    Se puede copiar una Fila del datagridview en otra fila vacia  pulsando un boton 

    es es el resultado

    entonces quiero copiar toda la fila de arriba duplicar abajo en la que esta vacia

    se puede?

    saludos


    ruben


    martes, 29 de agosto de 2017 9:49

Respuestas

  • La resolución es simple, se basa en recuperar una referencia de fila y copiarla, tal cual como lo he descrito. Sin embargo, debes precisar si los datos se encuentran enlazados a un origen de datos o han sido agregados a la grilla mediante el método Add().


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 31 de agosto de 2017 3:44

Todas las respuestas

  • Lo bueno Seria Seleccionar toda la fila y luego con un control c o algo asi pegar en el de abjo

    es posible?


    ruben

    martes, 29 de agosto de 2017 13:41
  • Te propongo utilizár un contextMenúStrip y asociado al DGV y disparar el código desde allí, me apego a tu necesidad salvado detalles tales como que aluna celda de la fila debe estar seleccionada por el Currentrow y que siempre cargará en la celda siguiente

    Creas un ContextMenuStrip y lo asocias al DGV colocas en él un button "Agregar" con el siguierte código

       Dgv.CurrentRow.Selected = True
            Dim a As Integer = Dgv.CurrentRow.Index
            Dim v As Integer = 0
            For Each row As DataGridViewRow In Dgv.SelectedRows
    
                For i As Integer = 0 To Dgv.Columns.Count - 1
                    Dgv.Rows(a + 1).Cells(i).Value = Dgv.Rows(a).Cells(i).Value
                Next
            Next
    El mismo código lo puedes colocar en un button y disparar desde allí, la dar clic derecho en una celda aparecerá el menú con el button para disparar.


    • Editado Marcelo PF martes, 29 de agosto de 2017 14:57
    martes, 29 de agosto de 2017 14:56
  • Encontré un error en caso que el cursor esté en la ultima fila por tal deverá agregar un row para efectuar la carga

    quedaría así

     Private Sub AgregarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenúToolStripMenuItem.Click
            Dgv.CurrentRow.Selected = True
            MsgBox(Dgv.CurrentRow.Index)
            Dim a As Integer = Dgv.CurrentRow.Index
            If a = Dgv.Rows.Count - 1 Then
                Dgv.Rows.Add()
            End If
            Dim v As Integer = 0
            For Each row As DataGridViewRow In Dgv.SelectedRows
    
                For i As Integer = 0 To Dgv.Columns.Count - 1
                    Dgv.Rows(a + 1).Cells(i).Value = Dgv.Rows(a).Cells(i).Value
    
                Next
            Next
        End Sub

    martes, 29 de agosto de 2017 15:12
  • Lo siento muchisiiiisimo

    Me equivoque de Foro era en C#

    Saludos


    ruben

    martes, 29 de agosto de 2017 15:46
  • no hay problema dame un momento
    martes, 29 de agosto de 2017 16:01
  •   private void agregarToolStripMenuItem_Click(object sender, EventArgs e)
            {
                      
                Dgw.CurrentRow.Selected = true;

                int a = Dgw.CurrentRow.Index;
                if (a == Dgw.Rows.Count - 1)
                {
                    Dgw.Rows.Add();
                }

                for (int i = 0; i <= Dgw.Columns.Count - 1; i++)
                {
                    Dgw.Rows[a + 1].Cells[i].Value = Dgw.Rows[a].Cells[i].Value;

                }
            }

    Prueba y me dices Saludos

    Edito; agrego corchetes al código


    • Propuesto como respuesta Jorge TurradoMVP martes, 29 de agosto de 2017 16:08
    • Editado Marcelo PF martes, 29 de agosto de 2017 18:14
    martes, 29 de agosto de 2017 16:06
  • Marcelo donde encuentro esto

    AgregarToolStripMenuItem_Click


    ruben

    martes, 29 de agosto de 2017 16:55
  • Que es esto

    AgregarToolStripMenuItem_Click

    Y como se agrega

    Perdona


    ruben

    martes, 29 de agosto de 2017 17:04
  • Y si no hago con el stripmenu se puede hacer de otra forma


    ruben

    martes, 29 de agosto de 2017 17:12
  • Si ruben puedes colocar el código en un button, pero previamente debes seleccionar una celda, igualmente el ContextMenúStrip es facíl busca en herramientes y fijaté los pasos de este otra consulta

    https://social.msdn.microsoft.com/Forums/es-ES/e6eef881-0695-4eeb-b122-d366e84735d0/opciones-para-click-derecho-sobre-item-de-listbox?forum=vcses

    Cualquier duda me dices

    martes, 29 de agosto de 2017 17:48
  • Mejoró el código, en caso de que no esté seleccionada una celda de aviso

     private void agregarToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Int32 selectedCellCount = Dgw.GetCellCount(DataGridViewElementStates.Selected);
                if (selectedCellCount < 0)
                {
                    MessageBox.Show("No se seleccionó una celda");
                    return;
                }
                    Dgw.CurrentRow.Selected = true;

                int a = Dgw.CurrentRow.Index;
                if (Dgw.CurrentRow.IsNewRow)
                {
                    MessageBox.Show("Es la última Fila, debe coloar valores");
                    return;
                }

                for (int i = 0; i <= Dgw.Columns.Count - 1; i++)
                {
                    Dgw.Rows[a + 1].Cells[i].Value = Dgw.Rows[a].Cells[i].Value;

                }
            }

    Saludos

    Sigo editanto; mejora, si se posiciona en la última fila avisa que debe cargar valores primero



    • Editado Marcelo PF martes, 29 de agosto de 2017 20:07
    martes, 29 de agosto de 2017 18:23
  • Marcelo

    Me da este error

    Agregue el menu y luego cree un boton y en el puse el codigo


    ruben

    miércoles, 30 de agosto de 2017 9:34
  • No se cual es tu escenario, pero eso solo seleccióna la fila donde esté seleccionada la celda, además por lo que allí dice esa fila no existe, si seleccinaste una celda y luego pulsaste debería funcionar, ahora no puedo revisar (trabajo). Si ejecutas desde el menú tienes el mismo error?

    Saludos


    • Editado Marcelo PF miércoles, 30 de agosto de 2017 18:31
    miércoles, 30 de agosto de 2017 10:55
  • Hola Ruben, estuve probando recrear el error y al parecer es que no está seleccionada una celda y no tiene le foco el control DGV, para solucionarlo, al inicio del codigo le damos el foco al objeto, quedaría así.

      private void button3_Click(object sender, EventArgs e)
            {
                Dgw.Focus();
                Int32 selectedCellCount = Dgw.GetCellCount(DataGridViewElementStates.Selected);
                if (selectedCellCount <0 )
                {
                    MessageBox.Show("No se seleccionó una celda");
                    return;
                }
                Dgw.CurrentRow.Selected = true;
    
                int a = Dgw.CurrentRow.Index;
                if (Dgw.CurrentRow.IsNewRow)
                {
                    MessageBox.Show("Es el último Rown debe coloar valores");
                    return;
                }
    
                for (int i = 0; i <= Dgw.Columns.Count - 1; i++)
                {
                    Dgw.Rows[a + 1].Cells[i].Value = Dgw.Rows[a].Cells[i].Value;
    
                }
            }
    Saludos amigo y me cuentas como quedó el contextmenústrip y si necesitas ayuda con eso


    • Editado Marcelo PF miércoles, 30 de agosto de 2017 18:32
    miércoles, 30 de agosto de 2017 18:06
  • La resolución es simple, se basa en recuperar una referencia de fila y copiarla, tal cual como lo he descrito. Sin embargo, debes precisar si los datos se encuentran enlazados a un origen de datos o han sido agregados a la grilla mediante el método Add().


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 31 de agosto de 2017 3:44