none
Copiar columnas de un datagrid al portapapeles RRS feed

  • Pregunta

  • Hola.

    Deseo copiar al portapapeles determinas files de un datagrid

    En MSDN encontre este codigo de ejemplo

    Private Sub btnCopiaMultiple_Click(sender As Object, e As EventArgs) Handles btnCopiaMultiple.Click
    
            Clipboard.Clear()
    
            If Me.DataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0 Then
    
                Try
    
                    ' Add the selection to the clipboard.
                    Clipboard.SetDataObject(Me.DataGridView1.GetClipboardContent())
    
                    ' Replace the text box contents with the clipboard text.
                    Me.TextBox1.Text = Clipboard.GetText()
    
                    MessageBox.Show("Registros copiado al Portapapeles", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                Catch ex As System.Runtime.InteropServices.ExternalException
                    MsgBox("No se tiene acceso al portapapeles...", MsgBoxStyle.Critical)
                End Try
    
            End If
    
        End Sub

    Pero me lo copia con Tabuladores y las celdas en orden que estan en el datagrid

    Yo quiero copiarlas separadas con coma y las celdas que yo quiero no todas.

    podeis ayudarme



    Saludos a toda la comunidad.

    jueves, 25 de octubre de 2018 15:27

Respuestas

  • Puedes recorrer el grid por filas y columnas:

    Dim TextoCeldasSeleccionadas as String = ""
    Dim TextoFila as String
    For Each row As DataGridViewRow In grid.Rows
       TextoFila = ""
       For Each cell As DataGridViewCell In row.Cells
          If cell.Selected Then
             If TextoFila<>"" Then
                TextoFila += ", "
             End If
             TextoFila += cell.Value.ToString()            
          End If
       Next
       If TextoFila<>"" then
          TextoCeldasSeleccionadas += TextoFila & vbCrLf
       End If
    Next


    Saludos, Javier J

    • Marcado como respuesta FerScrich jueves, 25 de octubre de 2018 17:40
    jueves, 25 de octubre de 2018 17:15

Todas las respuestas

  • Hola FerScrich

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te recomiendo el siguiente enlace en el cual es un caso similar al tuyo y que puede servirte, lo único que debes hacer es convertir el código que está en C# a VB.Net 

    https://social.msdn.microsoft.com/Forums/es-ES/30fa8628-96af-4778-9afa-b140846286b1/copiar-toda-la-tabla-de-un-datagridview-al-portapapeles?forum=vcses

    Gracias por usar los foros de MSDN.

    Pablo Rubio

     _____

    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, 25 de octubre de 2018 15:51
  • DataGridView1.GetClipboardContent() te copia en el portapapales el contenido de las celdas que tengas seleccionadas en el grid.

    Si quieres puedes usar esta función para recorrer las celdas seleccionadas y crear una cadena separando por comas:

    Dim TextoCeldasSeleccionadas as String = ""
    Dim cell As DataGridViewCell
    
    For Each cell In DataGridView1.SelectedCells
        If TextoCeldasSeleccionadas<>"" Then
            TextoCeldasSeleccionadas += ", "
        End If
        TextoCeldasSeleccionadas  += cell.Value.ToString()
    Next
    
    ' Copio en el portapapeles la cadena formada 
    My.Computer.Clipboard.SetText(TextoCeldasSeleccionadas)


    Saludos, Javier J

    jueves, 25 de octubre de 2018 16:00
  • Gracias por vuestras respuestas.

    Pablo Rubio, eso no me sirve lo he probado y lo que hace es copiar todo el Datagrig poniendo el Header

    Javier Jimenez,  si me funciona perfectamente pero lo pone todo en una linea sin separar las filas.

    He visto que va leyendo celda a celda, se podría poner que lea fila a fila  para poder poner un vbcrlf y separarlos


    Saludos a toda la comunidad.

    jueves, 25 de octubre de 2018 16:23
  • Claro que lo pone en una línea. Si lo quieres separar usa vbCrlf para poner salto de línea.


    Saludos, Javier J

    jueves, 25 de octubre de 2018 16:41
  • ya lo he hecho pero va poniendo cada celda en una linea y lo que digo es que sea toda la fila en una linea

    osea cuando llega a la celda ultima poner el vbcrlf y cree otra linea con el valor de las 10 celdas de la fila  no se si me explico.


    Saludos a toda la comunidad.

    jueves, 25 de octubre de 2018 16:53
  • Puedes recorrer el grid por filas y columnas:

    Dim TextoCeldasSeleccionadas as String = ""
    Dim TextoFila as String
    For Each row As DataGridViewRow In grid.Rows
       TextoFila = ""
       For Each cell As DataGridViewCell In row.Cells
          If cell.Selected Then
             If TextoFila<>"" Then
                TextoFila += ", "
             End If
             TextoFila += cell.Value.ToString()            
          End If
       Next
       If TextoFila<>"" then
          TextoCeldasSeleccionadas += TextoFila & vbCrLf
       End If
    Next


    Saludos, Javier J

    • Marcado como respuesta FerScrich jueves, 25 de octubre de 2018 17:40
    jueves, 25 de octubre de 2018 17:15

  • Perfecto, Ahora si funciona como yo queria

    Muchas gracias  ya he marcado la respuesta correcta.

    Muy agradecido


    Saludos a toda la comunidad.

    jueves, 25 de octubre de 2018 17:41