none
Copiare contenuto selezionato da DatagridView1 a DatagridView2 RRS feed

  • Domanda

  • Salve,
    Ho una DataGridView nel Form1, quello che vorrei fare è copiare il contento delle celle selezionate e incollarle in una seconda DataGridView collocata nel Form2. 
    Per la funzione copia ho usato questo codice, che sembra funzionare senza problema : 

    DataGridView1.SelectAll()
    Clipboard.SetDataObject(Me.DataGridView1.GetClipboardContent())

    Il problema viene ora, cioè con il codice che dovrebbe andare a incollare il contenuto nella seconda DataGridView, quella situata nel Form2. 

    Il codice che ho usato è il seguente :

    Dim srFormattedData As String
    Dim s() As String
    Dim t As String
    Dim C() As String
    
    Dim objSpreadSheetData As IDataObject = Clipboard.GetDataObject
    
    srFormattedData = Clipboard.GetText()
    srFormattedData = srFormattedData.Replace(vbCrLf, Chr(13))
    
    
    Dim charSeparators() As Char = {Chr(13)}
    s = srFormattedData.Split(charSeparators) ' StringSplitOptions.RemoveEmptyEntries)
    Dim I As Short = 0
    Dim I2 As Integer = 0
    
    Dim Pos As Integer =Form2.DataGridView1.CurrentRow.Index
    
    For Each t In s
    t = t.Replace(vbTab, ";")
    C = t.Split(";")
    Form2.DataGridView1.Rows.Add(1)
    
    For Each N In C
    Form2.DataGridView1.Rows(Pos + I).Cells(I2).Value = N
    I2 += 1
    Next
    
    I += 1
    I2 = 0
    Next

    Il problema è che quando eseguo questo codice ottengo questo errore : "Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione della raccolta."Se può esservi di aiuto ho anche notato che se eseguo soltanto il codice per incollare le celle senza aver prima eseguito quello per copiarle non ottengo nessun errore e il codice risulta funzionante. Sapreste dirmi a cosa è dovuto questo errore e cosa dovrei fare per risolverlo?

    Grazie Mille

    lunedì 30 novembre 2015 17:57

Risposte

  • Comunque il problema dell'indice è dovuto al fatto che quando copi la griglia negli appunti, copi anche la colonna dell'intestazione riga (RowHeaders), pertanto la grid della Form2 riceve i valori di una colonna in più.

    Osserva la variabile srFormattedData in debug, noterai che contiene una colonna vuota.

    Se nascondi le intestazioni di riga (RowHeaders.Visible=False) vedrai il tuo codice funzionare.

    Andrea

    PS: perché passi dalla clipboard?? :-)

    lunedì 30 novembre 2015 20:03

Tutte le risposte

  • Ciao,

    come mai passi dalla clipboard per trasferire i dati?

    http://canlu.blogspot.it/2009/06/copying-datagridviewrow-to-another.html

    Andrea

    lunedì 30 novembre 2015 19:51
  • Comunque il problema dell'indice è dovuto al fatto che quando copi la griglia negli appunti, copi anche la colonna dell'intestazione riga (RowHeaders), pertanto la grid della Form2 riceve i valori di una colonna in più.

    Osserva la variabile srFormattedData in debug, noterai che contiene una colonna vuota.

    Se nascondi le intestazioni di riga (RowHeaders.Visible=False) vedrai il tuo codice funzionare.

    Andrea

    PS: perché passi dalla clipboard?? :-)

    lunedì 30 novembre 2015 20:03
  • Innanzitutto Grazie Mille, ho provato a fare come hai detto tu (Settando RowHeaders su False) e funziona perfettamente. Sono passato dalla clipboard in quanto sinceramente non ho tanta dimestichezza con i controlli del DataGridView e quella del Clipboard è la prima soluzione che mi è venuta in mente. Per quanto riguarda il link che hai postato andrò sicuramente ad approfondirlo appena ne avrò tempo, e cercherò di sostituire il codice attuale con uno più performante e adatto alla situazione,nel frattempo ti ringrazio nuovamente dell'aiuto e ti auguro una buona serata :)
    lunedì 30 novembre 2015 20:37