Differenze tra le versioni di "Ordinare i valori di più righe in base ad una colonna"

Da Gambas-it.org - Wikipedia.
(Nuova pagina: 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 ...)
 
Riga 46: Riga 46:
 
    
 
    
 
    
 
    
  '''Public''' Sub GridView1_Sort() {[[#Note|1]]}
+
  '''Public''' Sub GridView1_Sort() [<SUP>[[#Note|nota 1]]</sup>]
 
     Dim Values, ValueSorted As New String[]     
 
     Dim Values, ValueSorted As New String[]     
 
     Dim Nx, iNx As Integer     
 
     Dim Nx, iNx As Integer     
Riga 55: Riga 55:
 
     Next     
 
     Next     
 
     ValueSorted = Values.Copy()     
 
     ValueSorted = Values.Copy()     
     ValueSorted.Sort(GridView1.Columns.Ascending)  
+
     If GridView1.Columns.Ascending Then
 +
      ValueSorted.Sort(gb.Ascent)
 +
    Else
 +
      ValueSorted.Sort(gb.Descent)      
 +
    Endif
 
     For Nx = 0 To ValueSorted.Max     
 
     For Nx = 0 To ValueSorted.Max     
 
       For iNx = 0 To GridView1.Columns.Max     
 
       For iNx = 0 To GridView1.Columns.Max     

Versione delle 07:56, 5 apr 2016

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 .