none
Copiar y pegar toda la fila o celdas seleccionadas especificadas en un mismo datagridview RRS feed

  • Pregunta

  • Buenas Tardes he visto un post y de ese me guia pero la unica diferencia de ese post con el mio es que lo mio es en modo edicion

    Alli el Sr. Enrique Montejo menciona este codigo

    Post

    Protected Overrides Function ProcessCmdKey( _
            ByRef msg As System.Windows.Forms.Message, _
            keyData As System.Windows.Forms.Keys) As Boolean
    
            ' Si el control DataGridView no tiene el foco,
            ' abandonamos el procedimiento.
            '
            If (Not (dgvDetalle.Focused)) Then _
                Return MyBase.ProcessCmdKey(msg, keyData)
    
            ' Comprobamos si se ha pulsado la combinación
            ' de teclas Ctrl + V.
            '
            If (Not (keyData = (Keys.V Or Keys.Control))) Then _
                    Return MyBase.ProcessCmdKey(msg, keyData)
    
            ' Comprobamos si el contenido del portapapeles es texto.
            '
            Dim isTexto As Boolean = Clipboard.GetDataObject.GetDataPresent(DataFormats.Text)
    
            If (isTexto) Then
                ' Celda actual del control DataGridView
                '
                Dim currentCell As DataGridViewCell = dgvDetalle.CurrentCell
                currentCell.Value = My.Computer.Clipboard.GetText()
    
            End If
    
            Return MyBase.ProcessCmdKey(msg, keyData)
    
        End Function

    Lo he probado pero en mi caso en 1 sola celda se mete todas las columnas que yo haya seleccionado no se si me dejo entender mi datagrid tiene muchas columnas mas de 20

    entonces ejemplo si selecciono toda la fila le digo Ctrl+C

    lo toma, y selecciono la otra fila  la primera celda se llena con el contenido de la primera y no en cada celda que corresponde.

    Graficamente se ve asi.

    A eso me refiero yo ingreso los datos mediante la edicion del dgv  pero como la siguiente fila es lo mismo a excepcion de las horas  quiero copiar todo pero al pegar no se queda solo en la primera y no en sus respectivas celdas.

    Alguna solucion a eso?

    Saludos




    viernes, 25 de mayo de 2018 20:04

Respuestas

  • Buenas ya obtuve la solucion del dgv en el evento keydown es el siguiente

     Private Sub dgvDetalle_KeyDown(sender As Object, e As KeyEventArgs) Handles dgvDetalle.KeyDown
            If e.Control AndAlso e.KeyCode = Keys.C Then
                Dim objeto_datos As DataObject = dgvDetalle.GetClipboardContent()
                Clipboard.SetDataObject(objeto_datos)
                e.Handled = True
            ElseIf e.Control AndAlso e.KeyCode = Keys.V Then
                Dim texto_obtenido As String = Clipboard.GetText()
                Dim lineas As String() = texto_obtenido.Split(ControlChars.Lf)
                Dim fila As Integer = dgvDetalle.CurrentCell.RowIndex
                Dim columna As Integer = dgvDetalle.CurrentCell.ColumnIndex
                Dim celdas As String() = lineas(0).Split(ControlChars.Tab)
                Dim celdas_seleccionadas As Integer = celdas.Length
    
                For indice As Integer = 0 To celdas_seleccionadas - 1
                    dgvDetalle(columna, fila).Value = celdas(indice)
                    columna += 1
                Next
            End If
        End Sub

    LO unico que no puedo copiar 5 filas de una sola a no ser que algun valor deba cambiar puedo copiar fila por fila.

    • Marcado como respuesta Javier Roque sábado, 26 de mayo de 2018 0:11
    viernes, 25 de mayo de 2018 22:47

Todas las respuestas

  • Buenas ya obtuve la solucion del dgv en el evento keydown es el siguiente

     Private Sub dgvDetalle_KeyDown(sender As Object, e As KeyEventArgs) Handles dgvDetalle.KeyDown
            If e.Control AndAlso e.KeyCode = Keys.C Then
                Dim objeto_datos As DataObject = dgvDetalle.GetClipboardContent()
                Clipboard.SetDataObject(objeto_datos)
                e.Handled = True
            ElseIf e.Control AndAlso e.KeyCode = Keys.V Then
                Dim texto_obtenido As String = Clipboard.GetText()
                Dim lineas As String() = texto_obtenido.Split(ControlChars.Lf)
                Dim fila As Integer = dgvDetalle.CurrentCell.RowIndex
                Dim columna As Integer = dgvDetalle.CurrentCell.ColumnIndex
                Dim celdas As String() = lineas(0).Split(ControlChars.Tab)
                Dim celdas_seleccionadas As Integer = celdas.Length
    
                For indice As Integer = 0 To celdas_seleccionadas - 1
                    dgvDetalle(columna, fila).Value = celdas(indice)
                    columna += 1
                Next
            End If
        End Sub

    LO unico que no puedo copiar 5 filas de una sola a no ser que algun valor deba cambiar puedo copiar fila por fila.

    • Marcado como respuesta Javier Roque sábado, 26 de mayo de 2018 0:11
    viernes, 25 de mayo de 2018 22:47
  • Si alguien tiene algun comentario respecto a copiar mas de 1 fila me lo dice sino Gracias
    sábado, 26 de mayo de 2018 0:11