Ho dovuto affrontare recentemente la gestione di trasferimento testo da una GridView ad un'altra costruite nella stessa Form, alternativamente dalla prima alla seconda o dalla seconda alla prima. Il risultato ottenuto mi é sembrato utile ed ho pensato di inserirlo in questo nuovo argomento di eventuale discussione per proporlo a chi, come me, dovesse incontrare una necessità simile.
metodo di pseudo indirizzamento ad Oggetti grafici:
Può capitare di dovere trattare il testo internamente ad oggetti grafici della stessa natura senza però duplicare codice, specialmente se esteso. Supponiamo di dovere impegnare due GridView per trasferire il contenuto di una o più righe dalla prima alla seconda e viceversa, attraverso la selezione dell'utente.
Prima di tutto bisogna inserire nel parametro Tag delle GridView1 e GridView2 (da questo momento chiamate rispettivamente GridView di partenza e GridView di arrivo) una stringa per il riconoscimento automatico dela GridView con Focus attivo:
GridView1.Tag=”A”
GridView2.Tag=”B”
Nella sezione Dichirazioni della Form.Class relativa occorre dichiarare, in modo da renderli validi per tutta la classe, gli oggetti per una nuova istanza delle due GridView:
Private oGridView1 As Object[ ]
Private oGridView2 As Object[ ]
Nella stessa sezione (Dichiarazioni) dichiariamo gli oggetti indice che serviranno successivamente per indirizzare il puntamento alle righe delle due GridView:
Private oIndGridView1 As Object
Private oIndGridView2 As Object
Nelle procedure evento _DblClick delle due GridView basta richiamare un 'unica procedura Sub o Function, destinata a contenere le istruzioni di trattamento del testo della riga, selezionata di volta in volta:
Public Sub GridView1_DblClick()
GriMovDblClick_Comu
End
Public Sub GridView2_DblClick()
GriMovDblClick_Comu
End
La procedura comune risulterà pertanto simile al seguente esempio:
Private Sub GriMovDblClick_Comu()
Dim iInd1 As Integer
Dim iInd2 As Integer
'-----------------------------------------------------------------------------------------
oGridView1 = New Object[ ]
oGridView2 = New Object[ ]
If Last.tag = "A" Then
oGridView1.Add(GridView1) GridView di partenza
oGridView2.Add(GridView2) GridView di arrivo
Else
oGridView1.Add(GridView2) nuova GridView di partenza
oGridView2.Add(GridView1) nuova GridView di arrivo
Endif
For Each oIndGridView1 In oGridView1 ┐
Next ├─────» creano il criterio di puntamento automatico
For Each oIndGridView2 In oGridView2 │
Next ┘
iInd1 = oIndGridView1.Row
For iInd2 = 0 To oIndGridView2.Rows.count – 1
If oIndGridView2[iInd2, 0].Text <> "" Then
oIndGridView2[iInd2, 0].Text = oIndGridView1[iInd1, 0].Text
oIndGridView2[iInd2, 1].Text = oIndGridView1[iInd1, 1].Text
...
oIndGridView2[iInd2, n].Text = oIndGridView1[iInd1, n].Text (n = numero di colonne – 1 delle · GridView di partenza e d'arrivo
oIndGridView1[iInd1, 0].Text = “”
oIndGridView1[iInd1, 1].Text = “”
...
oIndGridView1[iInd1, n].Text = “”
· Endif
· Next
End
Per chi volesse mettere in pratica l'esempio riportato qui sopra, ... Buon lavoro! ;D
:ciao: