......ad ogni modo voglio provare a seguire un percorso considerando l'ipotesi di voler mettere in ordine le
stringhe presenti nelle celle di una sola colonna.
Private a As New String[]
Public Sub Form_Open()
Dim j As Byte
' Allora... impostiamo 6 colonne e alcune righe alla GridView:
With GridView1
.Columns.Count = 6
.Rows.Count = 3
End With
' Ci inventiamo qui, per poter creare l'esempio, un "motore" a manovella
' che im-ponga una stringa in ciascuna delle tre celle della 1^ colonna:
For j = 0 to 2
With GridView1[j, 0]
' coloriamo di verde la nostra colonna:
.Background = Color.Green
' per "semplificare" l'esempio, mettiamo solo un carattere:
.Text = Chr(80 - j)
End With
' Inseriamo ciascun carattere in una variabile stringa array,
' perché "solo così", potremo utilizzare una funzione di Gambas
' per poter procedere al riordino dei caratteri.
' Prendiamo quei caratteri *dall'interno di ciascuna cella* della colonna:
a.Add(GridView1[j, 0].Text)
Next
End
Public Sub Button1_Click()
Dim j As Byte
' Nonostante vi siano dei caratteri, è possibile effettuare anche
' con essi al loro riordino ! Riordino che avverrà nel rispetto
' della sequenza imposta nel protocollo ASCII. Provvediamo, dunque,
' ad ordinare qui i caratteri in modo "ascendente" (dalla A alla Z):
a.Sort(gb.Ascent)
' Raggiungo il nostro obiettivo finale di vedere "ordinati"
' all'interno della 1^ colonna:
For j = 0 to 2
GridView1[j, 0].Text = a[j]
Next
End
ATTENZIONE ! Tutto tranquillo se il primo carattere delle
stringhe (qualunque lunghezza esse abbiano) è una lettera dell'alfabeto; ma se dinnanzi alle lettere c'è una quantità di caratteri numerici diversa da una stringa rispetto ad un'altra, il comportamento della funzione, per effettuare il riordino, cambia !
Infatti, se per esempio facciamo compiere il riordino (
ascendente, come prima) di queste tre stringhe: "
55z", "
111p" e "
9a", il riordino prenderà in considerazione il
primo carattere sulla base del protocollo ASCII. In tal caso avremo questo riordino:
111p
55z
9ae
non il contrario, come ci aspetteremmo !
Per ovviare a questo inconveniente, uno stratagemma può essere quello di far aggiungere degli zero dinanzi al primo carattere, in maniera tale che ciascuna stringa iniziale, alla quale saranno stati aggiunti quegli zero, abbia
così lo
stesso numero di caratteri delle altre stringhe presenti nell'array. Prendendo le stringhe di prima, insomma dovremo per esempio avere:
0111p
0055z
0009a
Public Sub Button1_Click()
Dim j As Byte
Dim s as string
For j = 0 To 2
s = String$(5 - Len(GridView1[j, 0].Text), "0") & GridView1[j, 0].Text
' Carichiamo quelle stringhe così modificate nella variabile array:
a.Add(s)
Next
e procedendo quindi al riordino mediante il predetto metodo
variabile_Array.Sort, riusciremo ad ottenere il riordino di quelle particolari stringhe; ed avremo la nuova disposizione degli elementi all'interno dell'array come segue:
0009a
0055z
0111p
Successivamente elimineremo gli zero che abbiamo
strategicamente aggiunto:
For j = 0 To 2
a[j] = Replace(a[j], "0", "")
Next
e ripiazziamo, così, nella 1
a colonna quelle tre stringhe, ri-ordinate e ripulite dagli zero che avevamo aggiunto:
For j = 0 To 2
GridView1[j, 0].Text = a[j]
Next
End
ed il gioco è fatto:
9a
55z
111p
...se
md9327 legge questa "
pappa pronta", mi ammazza !