Principale utente con più risposte
Copiare contenuto selezionato da DatagridView1 a DatagridView2

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
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?? :-)
- Proposto come risposta Renato Marzaro []Moderator martedì 1 dicembre 2015 07:27
- Contrassegnato come risposta Renato Marzaro []Moderator domenica 6 dicembre 2015 09:51
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
-
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?? :-)
- Proposto come risposta Renato Marzaro []Moderator martedì 1 dicembre 2015 07:27
- Contrassegnato come risposta Renato Marzaro []Moderator domenica 6 dicembre 2015 09:51
-
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 :)