Ordinare in una GridView i valori di più righe in base ad una colonna
Da Gambas-it.org - Wikipedia.
(Reindirizzamento da Ordinare i valori di più righe in base ad una colonna)
Avendo una griglia con diverse righe e diverse colonne, può sorgere la necessità di ordinare i valori di dette righe in base alla colonna sulla quale si clicchi.
Facciamo l'esempio di una griglia, costituita da tre righe e tre colonne; ciascuna colonna contiene dei valori nelle proprie celle. L'intento è quello di ordinare i valori di una colonna, cliccando nella cella della colonna medesima nell'header, e conseguentemente anche i valori delle altre colonne secondo lo spostamento dei valori della colonna cliccata. Avremo quindi lo spostamento delle righe della griglia in base al riordino dei valori presenti nella colonna cliccata.
Public Sub Form_Open() Dim j As Byte With GridView1 .Columns.Count = 3 .Rows.Count = 3 End With With GridView1 .Header = 1 .Columns[0].Alignment = Align.Center .Columns[0].Title = "Id" .Columns[1].Alignment = Align.Center .Columns[1].Title = "Nome" .Columns[2].Alignment = Align.Center .Columns[2].Title = "Altro" End With For j = 0 To 2 With GridView1[j, 0] .Text = CStr(j) End With With GridView1[j, 1] .Text = Chr(80 - j) End With With GridView1[j, 2] .Text = CStr(Fix(Rnd(10, 50))) End With Next ' Questo consente di sollevare l'evento _Sort. ' Infatti se si omette, non funziona più. ' (E' possibile omettere " .Columns.Sort = 0 ": di default è la colonna num. 0): With GridView1 .Sorted = True .Columns.Sort = 0 End With End Public Sub GridView1_Sort() [nota 1] Dim Values, ValueSorted As New String[] Dim Nx, iNx As Integer Dim tmp As String For Nx = 0 To GridView1.Rows.Max Values.Add(GridView1[Nx, GridView1.Columns.Sort].Text) Next ValueSorted = Values.Copy() If GridView1.Columns.Ascending Then ValueSorted.Sort(gb.Ascent) Else ValueSorted.Sort(gb.Descent) Endif For Nx = 0 To ValueSorted.Max For iNx = 0 To GridView1.Columns.Max Swap GridView1[Nx, iNx].Text, GridView1[Values.Find(ValueSorted[Nx], 0, Nx), iNx].Text Next Values.Clear() For iNx = 0 To GridView1.Rows.Max Values.Add(GridView1[iNx, GridView1.Columns.Sort].Text) Next Next GridView1.Refresh() End
Note
[1] Questa parte di codice è stata elaborata dall'utente Milio del forum di Gambas-it.org .