none
gestire pressione tasti datagridview visual c# RRS feed

  • Domanda

  • Salve, grazie al Vostro Forum ho potuto sviluppare una piccola applicazione contenente un datagridview che visualizza dati da un database sql server.

    Volevo sapere se era possibile riprodurre l'evento di pressione dei tasti Ctrl + ' per poter copiare il contenuto della cella superiore rispetto a quella selezionata del datagridview, senza fare copia e incolla, così come funziona con Excel.

    Un saluto, Nando!

    lunedì 28 novembre 2011 14:06

Risposte

  • Certo, ti basta intercettare l'evento KeyUp della griglia e giocare con gli indici di riga:

    private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 219 && e.Modifiers == Keys.Control) // Combinazione CTRL+'
        {
            int prevRow = dataGridView1.CurrentCell.RowIndex - 1;
            if (prevRow >= 0)
            {
                var value = dataGridView1[dataGridView1.CurrentCell.ColumnIndex, prevRow].Value;
                dataGridView1.CurrentCell.Value = value;
            }
        }
    }
    

    Sempre a disposizione.


    Marco Minerva, marco.minerva@gmail.com
    lunedì 28 novembre 2011 15:14
    Moderatore
  • Allora prova a salvarti l'indice di riga e colonna della cella, quindi a reimpostare esplicitamente quei valori:

    var columnIndex = dataGridView1.CurrentCell.ColumnIndex;
    var rowIndex = dataGridView1.CurrentCell.RowIndex;
    (dataGridView1.DataSource as BindingSource).ResetBindings(false);
    dataGridView1.CurrentCell = dataGridView1[columnIndex, rowIndex];
    

     


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    • Contrassegnato come risposta mana973 mercoledì 30 novembre 2011 11:39
    mercoledì 30 novembre 2011 10:01
    Moderatore
  • 17 è il codice del tasto Control, quindi l'evento KeyUp di dice che è stato rilasciato quel tasto (in pratica, quando rilasci la tua combinazione di tasti, vengono generati due eventi KeyUp, uno per ogni tasto rilasciato). Puoi aggirare il problema utilizzando l'evento KeyDown al posto di KeyUp: ti basta cambiare l'handler dell'evento, il codice rimane lo stesso.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    • Contrassegnato come risposta mana973 mercoledì 30 novembre 2011 11:39
    mercoledì 30 novembre 2011 10:57
    Moderatore
  • Ho risolto così:
    private void tArchivioDataGridView_KeyDown(object sender, KeyEventArgs e)
            {
                if ((e.KeyCode == Keys.Z) && (e.Modifiers == Keys.Control)) // Combinazione CTRL+S
                {
                    int prevRow = tArchivioDataGridView.CurrentCell.RowIndex - 1;
                    if (prevRow >= 0)
                    {
                        var value = tArchivioDataGridView[tArchivioDataGridView.CurrentCell.ColumnIndex, prevRow].Value;
                        tArchivioDataGridView.CurrentCell.Value = value;
                        var columnIndex = tArchivioDataGridView.CurrentCell.ColumnIndex;
                        var rowIndex = tArchivioDataGridView.CurrentCell.RowIndex;
                        (tArchivioDataGridView.DataSource as BindingSource).ResetBindings(false);
                        tArchivioDataGridView.CurrentCell = tArchivioDataGridView[columnIndex, rowIndex];
                    }
                }
                else if (e.KeyCode==Keys.Escape)
                {
                     int selectindex = tArchivioDataGridView.CurrentCell.RowIndex;
                     tArchivioDataGridView.Rows.RemoveAt(selectindex);
                }
             }
    Grazie!
    • Contrassegnato come risposta Irina Turcu mercoledì 30 novembre 2011 17:05
    mercoledì 30 novembre 2011 14:10

Tutte le risposte

  • Certo, ti basta intercettare l'evento KeyUp della griglia e giocare con gli indici di riga:

    private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 219 && e.Modifiers == Keys.Control) // Combinazione CTRL+'
        {
            int prevRow = dataGridView1.CurrentCell.RowIndex - 1;
            if (prevRow >= 0)
            {
                var value = dataGridView1[dataGridView1.CurrentCell.ColumnIndex, prevRow].Value;
                dataGridView1.CurrentCell.Value = value;
            }
        }
    }
    

    Sempre a disposizione.


    Marco Minerva, marco.minerva@gmail.com
    lunedì 28 novembre 2011 15:14
    Moderatore
  • Ciao Marco, grazie per la soluzione, era proprio quello che chiedevo.

    Adesso però ho notato che durante l'inserimento di un nuovo record nel datagrid, se immetto i dati manualmente tutto funziona, cioè all'immisione del primo dato nella prima cella  subito mi inerisce la nuova riga sottostante e alla pressione del tasto salva (update) mi aggiorna il dataset collegato al datagrid, invece quando immetto con la combinazione dei tasti CTRL+' se provo a salvare (aggiornare) le modifiche, la riga che ho appena inserito scompare il contenuto appena immesso come per magia, ma il tutto se esco e faccio ripartire l'applicazione è aggiornato. Anche se dopo aver aggiunto nella nuova riga dei dati in varie celle e poi mi sposto al di sopra per modificare un'altra cella, il contenuto appena immesso scompare come per magia, ma se clicco sulla riga ricompaiono i dati immessi....

    Boh, forse bisogna migliorare il codice, o forse rimane il focus sulla cella superiore?

    Aiuto!

    martedì 29 novembre 2011 08:57
  • Non conosco come è strutturato il tuo programma, ma forse quello che devi fare è forzare l'aggiornamento del DataSet quando si preme la combinazione CTRL+', quindi effettuare nuovamente il bind con la griglia: in questo modo, i dati dovrebbero essere sincronizzati.


    Marco Minerva, marco.minerva@gmail.com
    martedì 29 novembre 2011 09:03
    Moderatore
  • Il mio programma è strutturato con una form al cui interno ha un toobar predefinito e un datagridview che attinge i dati daun databindingsource che a sua volta da un dataset (semplicissimo). Il fatto strano è che quando inserisco i dati manualmente quando lascio la cella del datagrid subito si imposta una nuova riga, mentre se inserisco i dati con la combinazione CTRL +' non si aggiunge la nuova riga sottostante per un nuovo inserimento.

    Se la soluzione fosse quella da te suggerita, mi puoi postare il codice, questo è il mio:

    public

     

    partial class FInserimento : Form

    {

    public

    FInserimento()

    {

     

    InitializeComponent();

    }

     

    private void FInserimento_Load(object sender, EventArgs

    e)

    {

     

    // TODO: questa riga di codice carica i dati nella tabella 'archivioDataSet.TUffici'. È possibile spostarla o rimuoverla se necessario.

     

    this.tUfficiTableAdapter.Fill(this

    .archivioDataSet.TUffici);

     

    // TODO: questa riga di codice carica i dati nella tabella 'archivioDataSet.TArchivio'. È possibile spostarla o rimuoverla se necessario.

     

    this.tArchivioTableAdapter.Fill(this

    .archivioDataSet.TArchivio);

     

    }

     

    private void tArchivioBindingNavigatorSaveItem_Click(object sender, EventArgs

    e)

    {

     

    this

    .Validate();

     

    this

    .tArchivioBindingSource.EndEdit();

     

    this.tableAdapterManager.UpdateAll(this

    .archivioDataSet);

    }

     

    private void toolStripButton1_Click(object sender, EventArgs

    e)

    {

     

    Application

    .Exit();

    }

     

    private void tArchivioDataGridView_KeyUp(object sender, KeyEventArgs

    e)

    {

     

    if(e.KeyValue == 219 && e.Modifiers == Keys.Control)

    // Combinazione CTRL+'

    {

     

    int

    prevRow = tArchivioDataGridView.CurrentCell.RowIndex - 1;

     

    if

    (prevRow >= 0)

    {

     

    var

    value = tArchivioDataGridView[tArchivioDataGridView.CurrentCell.ColumnIndex, prevRow].Value;

    tArchivioDataGridView.CurrentCell.Value = value;

    }

    }

    }

    }

    }

    

    martedì 29 novembre 2011 10:08
  • Hai verificato che, quando inserisci i dati con CTRL+', anche se la visualizzazione non è sbagliata, il DataSet è comunque aggiornato con le informazioni corrette?


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 10:17
    Moderatore
  • Si i dati vengono inseriti ugualmente, ma è fastidioso per l'utente che interagisce su tutto il datagrid vedersi scomparire i dati appena inseriti prima di poterli aggiornare nel dataset
    martedì 29 novembre 2011 10:25
  • Hai provato a ripetere il bind con la sorgente, ovvero rifare la stessa operazione che fai in fase di inizializzazione? Se il DataSet è aggiornato, rifacendo il bind, dovresti rivedere immediatamente tutti i dati inseriti.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 10:37
    Moderatore
  • Il problema si verifica quando inserisco un valore in una colonna di un record nuovo, se mi sposto nell'altra colonna non si aggiunge il nuovo record sottostante, come si verifica quando inserisco i dati manualmente.

    Cioè è come se nel momento in cui si lascia il focus della prima colonna dopo aver inserito il testo, non capisce di inserire il nuovo record sotto immediatamente.

    martedì 29 novembre 2011 10:50
  • Potresti provare ad aggiungere manualmente una nuova riga alla griglia, se non ricordo male con il metodo NewRow.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 11:11
    Moderatore
  • Scusami se sono ostinato, ma non riesco a capire perchè di tale comportamento.

    Adesso ho visto che dopo aver selezionato il nuovo record e digito qualcosa già inserisce il nuovo record sottostante. Perchè non lo fa quando faccio CTRL +'?

    martedì 29 novembre 2011 11:20
  • Perché, nel momento in cui inizi a digitare qualcosa, la cella entra in modalità di editing, ed il comportamento di default della griglia, quando si fa in fase di editing, è di inserire un nuovo record sottostante. Invece, se utilizzi CTRL+', non vai in edit, infatti il valore viene inserito dal codice (non sei tu che lo digiti).

    Per questo motivo ti consigliavo di provare a creare a mano una nuova riga.


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 11:27
    Moderatore
  • ok, dovrei inserire nel'evento keyup codice dopo aver immesso il valore:

    Potresti postarmi l'implementazione di codice che mi hai inviato prima?

    martedì 29 novembre 2011 11:50
  • Non ho capito scusa... Quale implementazione di codice ti serve?
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 12:03
    Moderatore
  • Cosa devo inserire nel codice che mi hai inviato prima per aggiungere manualmente il nuovo record sottostante?
    martedì 29 novembre 2011 12:04
  • Prova con dataGridView1.Rows.Add(), oppure, se lavori con un DataTable collegato alla griglia, puoi aggiungere una nuova riga direttamente ad esso.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 12:11
    Moderatore
  • Mi dice "Impossibile aggiungere righe a livello di codice all'insieme di righe di DataGridView in caso di associazione a dati del controllo."
    martedì 29 novembre 2011 12:18
  • Ottieni lo stesso errore con entrambi i metodi che ti ho suggerito?
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 13:27
    Moderatore
  • Il metodo newrow non lo trovo, invece dataGridView1.Rows.Add() mi restiruisce l'errore.

    Stavo pensando se io chiamo l'evento CellBeginEdit del datagridview si può ottenere lo stesso risultato, però con la pressione dei tasti CTRL+'.

    Mi sa di n o vero?

    martedì 29 novembre 2011 13:39
  • E invece hai provato ad aggiungere la riga al DataTable che è in bind con la DataGridView?

    L'evento CellBeginEdit, se premi la combinazione CTRL+', non viene generato perché, come ti ho detto prima, la cella non entra in modalità di editing.


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 13:45
    Moderatore
  • in effetti sto provando ma senza risultato, scusa ma sono entrato in pallone...

    in che modo devo inserire la nuova riga al datatable?

    martedì 29 novembre 2011 13:51
  • Sì, forse ti stai un po' perdendo :-)
     
    Allora, cerchiamo di fare il punto della situazione: se tu usi CTRL+' per copiare il contenuto della riga precedente, non entri in modalità di editing, quindi di fatto non viene aggiunta una nuova riga alla griglia. Per forzare l'aggiornamento della griglia, quando intercetti la pressione di CTRL+', puoi provare ad utilizzare l'istruzione
    (dataGridView1.DataSource as BindingSource).ResetBindings(false);  
    

    Che forza il refresh della sorgente dati.

    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 14:36
    Moderatore
  • Io ho bisogno di copiare soltanto una cella e non un'intera riga, è per questo che non posso utilizzare i metodi da Te suggeriti, se no ogni volta che mi sposto aggiungo righe vuote sottostanti.
    martedì 29 novembre 2011 14:40
  • Giocando con gli indici di riga e gli eventi di spostamento all'interno della griglia, dovresti riuscire facilmente a capire quando è la prima volta che premi CTRL+' all'interno di una riga (e si tratta dell'ultima riga della griglia), quindi puoi decidere se rileggere la fonte dati oppure no, con l'istruzione che ti ho indicato prima.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    martedì 29 novembre 2011 14:42
    Moderatore
  • private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 219 && e.Modifiers == Keys.Control) // Combinazione CTRL+'
        {
            int prevRow = dataGridView1.CurrentCell.RowIndex - 1;
            if (prevRow >= 0)
            {
                var value = dataGridView1[dataGridView1.CurrentCell.ColumnIndex, prevRow].Value;
                dataGridView1.CurrentCell.Value = value;
               (dataGridView1.DataSource as BindingSource).ResetBindings(false);  
    
            }
        }
    }
    
    
    
    


    Buongiorno Marco, grazie sempre per il Tuo aiuto, piano piano sto riuscendo a venirne fuori.

    Adesso però quando forzo l'aggiornamento e inserisco nel nuovo record in qualsiasi cella, mi inserisce la nuova riga sottostante, ma il focus si riporta sul record dove stavo inserendo sulla prima colonna.

    Come faccio a fargli capire di rimanere nella colonna dove ho inserito il nuovo valore? 

    mercoledì 30 novembre 2011 08:47
  • Ciao!
    Prima di richiamare il metodo ResetBindings, salva in una variabile il valore di dataGridView1.CurrentCell, quindi riassegnalo dopo l'aggiornamento. Ovvero:
    var currentCell = dataGridView1.CurrentCell;
    (dataGridView1.DataSource as BindingSource).ResetBindings(false);    
    dataGridView1.CurrentCell = currentCell;
    

    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 08:58
    Moderatore
  • Ho provato ma non funziona, mi restituisce il seguente errore "La cella specificata non appartiene a questo controllo DataGridView."

    Quando esegue l'istruzione (dataGridView1.DataSource as BindingSource).ResetBindings(false);  il valore current cell diventa

    "currentCell = {DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=-1 }}" perchè mi imposta il rowindex a -1

    mercoledì 30 novembre 2011 09:52
  • Allora prova a salvarti l'indice di riga e colonna della cella, quindi a reimpostare esplicitamente quei valori:

    var columnIndex = dataGridView1.CurrentCell.ColumnIndex;
    var rowIndex = dataGridView1.CurrentCell.RowIndex;
    (dataGridView1.DataSource as BindingSource).ResetBindings(false);
    dataGridView1.CurrentCell = dataGridView1[columnIndex, rowIndex];
    

     


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    • Contrassegnato come risposta mana973 mercoledì 30 novembre 2011 11:39
    mercoledì 30 novembre 2011 10:01
    Moderatore
  • Grande Marcoooooooooooooooooooooooo!!!!

    Funziona tutto ok!

    mercoledì 30 novembre 2011 10:10
  • Ce l'abbiamo fatta :-)

    Ti chiedo cortesemente di marcare la risposta corretta all'interno del thread!

    Alla prossima!


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 10:14
    Moderatore
  • Si ok, ti volevo chiedere un'ultima cosa (si fa per dire) dopo che mi hai aiutato diventerai il mio punto di riferimento.

    Stavo notanto che se cambio la combinazione dei tasti tipo:

    if

     

    (e.KeyCode == Keys.S && e.Modifiers == Keys.Control) // Combinazione CTRL+S

    non funziona tanto, la prima volta va bene ma le successive devo digitare più volte per far partire la procedura.

    Come mai?

     
    mercoledì 30 novembre 2011 10:21
  • Prova a mettere un punto di interruzione all'inizio della routine dataGridView1_KeyUp, così da verificare se viene richiamata ogni volta oppure no. Controlla anche i valori di e.KeyCode e e.Modifiers, così da assicurarti che siano esattamente quelli che ti aspetti.


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 10:25
    Moderatore
  • Ho controllato, alla prima pressione mi da: e.KeyCode = LButton | ShiftKey, alla seconda e.KeyCode = 83, oppure l'inverso
    mercoledì 30 novembre 2011 10:33
  • Oppure cambiando

    (e.KeyValue == 83 && e.Modifiers == Keys.Control) // Combinazione CTRL+S

    alla prima pressione mi da e.KeyCode = 17 non inserendo niente, alla seconda pressione e.KeyCode = 83 inserendo il valore, oppure l'inverso.

    Mi dici come formattare questo testo?

    mercoledì 30 novembre 2011 10:36
  • Molto strano, il valore corrispondente al tasto S è 83, gli altri valori non c'entrano niente... E se provi a cambiare tasto?
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 10:37
    Moderatore
  • Formattare il testo dove? Intendi all'interno di un post nel forum? Devi usare il pulsante "Inserisci codice" della barra degli strumenti (la seconda da destra), dopodiché puoi scrivere tutto il codice che vuoi, sarà formattato in automatico.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 10:41
    Moderatore
  • Ho provato le seguenti lettere vicine al tasto CTRL

    A - S - Z - X - C - V, ma è uguale si comportano tutte così

    funziona bene con l'apice CTRL + '

    ma perchè?

    mercoledì 30 novembre 2011 10:42
  • C'è sempre il valore 17 che da fastidio
    mercoledì 30 novembre 2011 10:49
  • Il valore 17 corrisponde al tasto ALT
    mercoledì 30 novembre 2011 10:57
  • 17 è il codice del tasto Control, quindi l'evento KeyUp di dice che è stato rilasciato quel tasto (in pratica, quando rilasci la tua combinazione di tasti, vengono generati due eventi KeyUp, uno per ogni tasto rilasciato). Puoi aggirare il problema utilizzando l'evento KeyDown al posto di KeyUp: ti basta cambiare l'handler dell'evento, il codice rimane lo stesso.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    • Contrassegnato come risposta mana973 mercoledì 30 novembre 2011 11:39
    mercoledì 30 novembre 2011 10:57
    Moderatore
  • Si è proprio così, grazie veramente tanto dell'aiuto!

    Cordiali saluti, a presto!

    Nando.

    • Contrassegnato come risposta mana973 mercoledì 30 novembre 2011 11:34
    • Contrassegno come risposta annullato mana973 mercoledì 30 novembre 2011 11:39
    mercoledì 30 novembre 2011 11:33
  • Ottimo, ora puoi veramente marcare la risposta corretta :-)
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 11:34
    Moderatore
  • Hum... Come mai hai contrassegnato il tuo post come risposta? Speravo che avresti segnato uno dei miei :-)
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 11:36
    Moderatore
  • Scusa ma mi sono sbagliato, è la prima volta che contrassegno un post..:-))
    mercoledì 30 novembre 2011 11:40
  • OK, nessun problema :-)

    Ne approfitto per suggerirti che dovresti segnare come risposta anche il mio primo post, così leggendo quei tre messaggi è possibile ricostruire l'intera soluzione al tuo problema.

    A presto!


    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 11:46
    Moderatore
  • Certo, ecco fatto...

    Grazie ancora, a presto!

    mercoledì 30 novembre 2011 11:57
  • Grazie a te, gentilissimo :-)
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 11:58
    Moderatore
  • Ciao Marco, scusa ancora...dovrei risolvere un'altro problemino...
     
    Mettiamo che l'utente mentre sta inserendo i dati vuole annullare l'inserimento, normalmente inserendo i dati manualmente e premendo il tasto ESC annulla in automatico il record che l'utente stava inserendo, riportando tutto come all'inizio cioè con l'utimo record vuoto in attesa che venga inserito qualcosa.
     
    Nel mio caso invece se premo ESC non succede nulla perchè ho forzato il refresh del datagrid.
     
    C'è un modo per annullare i dati che l'utente stava inserendo, visualizzando l'utimo record vuoto in modalità di inserimento?
     
    Nando!
    mercoledì 30 novembre 2011 13:00
  • Avendo forzato il refresh della griglia, la semplice pressione di ESC non può annullare l'inserimento. Quello che dovresti fare è intercettare il tasto ESC e cancellare dal dataset la nuova riga.
    Marco Minerva [MCPD], http://blogs.ugidotnet.org/marcom
    mercoledì 30 novembre 2011 13:40
    Moderatore
  • Quello che sto facendo è questo, ma non funziona 
    if (e.KeyCode==Keys.Escape)
                 {
                     int index = tArchivioDataGridView.SelectedRows[1].Index;
                     tArchivioDataGridView.Rows.RemoveAt(index);
                 }

    mercoledì 30 novembre 2011 13:59
  • Ho risolto così:
    private void tArchivioDataGridView_KeyDown(object sender, KeyEventArgs e)
            {
                if ((e.KeyCode == Keys.Z) && (e.Modifiers == Keys.Control)) // Combinazione CTRL+S
                {
                    int prevRow = tArchivioDataGridView.CurrentCell.RowIndex - 1;
                    if (prevRow >= 0)
                    {
                        var value = tArchivioDataGridView[tArchivioDataGridView.CurrentCell.ColumnIndex, prevRow].Value;
                        tArchivioDataGridView.CurrentCell.Value = value;
                        var columnIndex = tArchivioDataGridView.CurrentCell.ColumnIndex;
                        var rowIndex = tArchivioDataGridView.CurrentCell.RowIndex;
                        (tArchivioDataGridView.DataSource as BindingSource).ResetBindings(false);
                        tArchivioDataGridView.CurrentCell = tArchivioDataGridView[columnIndex, rowIndex];
                    }
                }
                else if (e.KeyCode==Keys.Escape)
                {
                     int selectindex = tArchivioDataGridView.CurrentCell.RowIndex;
                     tArchivioDataGridView.Rows.RemoveAt(selectindex);
                }
             }
    Grazie!
    • Contrassegnato come risposta Irina Turcu mercoledì 30 novembre 2011 17:05
    mercoledì 30 novembre 2011 14:10