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

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
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.
+
#REDIRECT [[Ordinare_in_una_GridView_i_valori_di_più_righe_in_base_ad_una_colonna]]
 
 
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'<I>header</i>, 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 
 
 
 
<FONT color=#006400>' ''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):''</font>
 
  With GridView1 
 
  .Sorted = True 
 
  .Columns.Sort = 0 
 
  End With 
 
 
 
'''End'''
 
 
 
 
 
'''Public''' Sub GridView1_Sort() [<SUP>[[#Note|nota 1]]</sup>]
 
    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 .
 

Versione attuale delle 06:33, 29 ago 2020