Copia/Incolla Da DataGridView

domenica 09 maggio 2010 - 19.17

nikkysixx Profilo | Junior Member

Ciao a tutti, mi chiedevo come abilitare il menu di scelta rapida copia/incolla che di solito si attiva col tasto destro selezionando un insieme di celle,magari in excel ,ma usando come origine alcune celle di un datagridview, in quanto per ora l unica selezione che riesco a fare è tramite ctrl + c / ctrl + v,mentre col destro non appare alcun menu di scelta rapida

Grazie

luxsor Profilo | Guru

Ciao Nikki,
per gestire la selezione di più celle, devi utilizzare il "ContextMenu" e tramite la proprità "selectedrows" gestisci le celle selezionate.

http://msdn.microsoft.com/it-it/library/system.windows.forms.datagridview.selectedrows(VS.90).aspx

Facci sapere



------------------------
Luxsor

nikkysixx Profilo | Junior Member

Ciao, ho creato il context menu strip,e gli ho assegnato le voci copia e incolla,ma col pulsante destro non appare nulla, e inoltre non ho ben capito come legare il context menu strip al datagridview
grazie!

luka82 Profilo | Junior Member

Alla proprietà ContextMenuStrip assegni il ContextMenu che hai creato

luxsor Profilo | Guru

Non ti dimenticare che per fare in modo che la proprietà SelectedRows venga popolata, è necessario impostare su FULLROWSELECT o ROWHEDERSELECT la proprietà SelectionMode

Facci sapere


------------------------
Luxsor

nikkysixx Profilo | Junior Member

Perfetto! il copia funziona a meraviglia,usando il metodo GetClipboardContent() ma per quanto riguarda incollare direttamente i dati sul datagridview?

Ho letto la documentazione ma sinceramente ho capito poco...
http://msdn.microsoft.com/en-us/library/ms171614.aspx

Grazie per qualsiasi suggerimento utile ;)

@luxsor : ho usato DataGridView1.GetClipboardContent() , e non selected rows...ho forse sbagliato?perchè non capisco il tuo suggerimento

luxsor Profilo | Guru

>@luxsor : ho usato DataGridView1.GetClipboardContent() , e non
>selected rows...ho forse sbagliato?
Assolutamente NO, ma vale solo per copiare qualcosa nel Clipboard.

Se puoi postare un piccolo progettino faccio un pò di prove io.


------------------------
Luxsor

nikkysixx Profilo | Junior Member

Ok ora lo preparo al volo ;) grazie per la disponibilità!
[edit] il file si chiama windows application 1,ed è presente
-un datagridview che si popola all avvio
-il contextmenustrip con la funzione copia gia'funzionante

Quindi manca la funzione associata alla voce incolla
Grazie

p.s. ho notato un bug,e cioè se il programma viene chiuso gli appunti vengono svuotati, come mai???

luxsor Profilo | Guru

OK prova così.

>p.s. ho notato un bug,e cioè se il programma viene chiuso gli
>appunti vengono svuotati, come mai???
Sicuramente è la classe clipboard che una volta distrutta svuota gli appunti.

Dai un occhiata sulla documentazione.

Fammi sapere


------------------------
Luxsor

nikkysixx Profilo | Junior Member

Grazie luxsor ,davvero bravo complimenti :) solo un piccolo problema, e cioè se faccio una selezione a quadrato invece di selezionare un intera riga,l incolla non funziona.
come mai?

luxsor Profilo | Guru

>Grazie luxsor ,davvero bravo complimenti :) solo un piccolo problema,
>e cioè se faccio una selezione a quadrato invece di selezionare
>un intera riga,l incolla non funziona.
>come mai?

Di che selezioni parli?
Che eccezione di genera?

Fammi sapere


------------------------
Luxsor

nikkysixx Profilo | Junior Member

Allora se seleziono e copio un intera riga e la incollo in una qualsiasi altra ottengo questo errore

Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme. Nome parametro: index

Poi ad esempio,prova a copiare un campo qualsiasi della colonna "Canzone" e a incollarlo su un altro record(sempre nella colonna "Canzone"),e se vedi questo finisce in una posizione diversa da quella selezionata,per la precisione,riempe le caselle a partire dalla prima colonna,invece che a partire dal punto in cui si clicca col mouse destro/incolla

luxsor Profilo | Guru

>Allora se seleziono e copio un intera riga e la incollo in una
>qualsiasi altra ottengo questo errore
>
>Index non compreso nell'intervallo. Richiesto valore non negativo
>e minore della dimensione dell'insieme. Nome parametro: index
Questo avviene quando l'intera cella la selezioni dalla barra sinistra del controllo, infatti facendo così currentrows è -1 quindi l'indice della riga non è valido.
Ti devi creare una varibile dove, tramite eventi come CELLCONTECTCLICK o altri, vai a memorizzare l'indice della riga e della colonna per poi passarla alla funzione incolla del menu.

>Poi ad esempio,prova a copiare un campo qualsiasi della colonna
>"Canzone" e a incollarlo su un altro record(sempre nella colonna
>"Canzone"),e se vedi questo finisce in una posizione diversa
>da quella selezionata,per la precisione,riempe le caselle a partire
>dalla prima colonna,invece che a partire dal punto in cui si
>clicca col mouse destro/incolla
Si infatti, questo perchè come indice inziale della cella adesso è impostato a 0, inceve lo devi impostare con l'indice della cella selezionata.


------------------------
Luxsor

luxsor Profilo | Guru

Prova questo.
Ti ho corretto l'indice delle colonne.


------------------------
Luxsor

nikkysixx Profilo | Junior Member

Perfetto ora provo a lavorare sul CELLCONTENTCLICK per risolvere il primo problema ,e se ho problemi ti faccio sapere
in ogni caso grazie per la disponibilità e la precisione
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5