Listin Gambas2

Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas

Origine : http://listingambas.blogspot.com/2011/06/modulo-ordenar-ordenar-un-gridviews-con.html



Module Ordonner. Ordonner un gridviews avec _ColumnClick

Et pourquoi pas? nous allons trier notre gridview dans le style  Excel ou Calc : Lorsque l'on cliquera sur le titre en-tête de la colonne, elle sera triée (par ordre alphabétique).
Comment pouvons-nous faire?
Nous allons utiliser l'événement  _ColumnClick qui se produit lorsque l'on clique sur le titre de la colonne. Nous allons également créer une variable ordonneliste, indiquant l'ordre de tri (passant de A à Z, ou  de Z à A). Cette variable est globale, et il faut la créer dans le module var .
Dans le module Ordonner, nous créerons deux procédures selon l'ordre croissant ( ord_AZ ) ou décroissant ( ord_ZA ), et nous passerons aux deux la grille que nous voulons trier (dans notre cas Fmain.Gridviewdonnees) et une colonne (column), qui prend une valeur lorsque l'événement. _ColumnClick survient.

Dans le module Var :
PUBLIC ordonneliste AS Integer



Dans le module Fmain :

PUBLIC SUB GridViewDonnees_ColumnClick(Column AS Integer )
IF var. ordonneliste = 0THEN
Ordonner. ord_AZ (GridViewDonnees, column)
var. ordonneliste = 1
ELSE
var. ordonneliste = 0
Ordonner. ord_ZA (GridViewDonnees, column)
ENDIF
END



Dans le module
Ordonner :
' Gambas module file
PUBLIC SUB ord_AZ (grid AS GridView, a AS Integer )
 'a: indique la colonne que nous  agençons
 'grid: est la grille que nous agençons
DIM limite AS Integer
DIM change1 AS STRING
DIM i AS Integer
DIM j AS Integer
DIM col AS Integer
grid. visible = FALSE
limite = grid . Rows.COUNT
IF (grid. columns.COUNT <a + 1 ) OR a < 0 THEN
Message. Erreur ( "Erreur de colonne à agencer" )
GOTO sortieordonner
ENDIF
FOR i = 0  TO limite - 1
FOR j = 0  TO limite - 2
IF UCase $ (grid [j, a]. Text ) > UCase $ (grid [j + 1 , a]. Text ) THEN
FOR col = 0 TO . grid. columns.COUNT - 1
change1 = grid [j, col]. Text
grid [j, col]. text = grid [j + 1 , col]. Text
grid [j + 1 , col]. text = change1
NEXT
ENDIF
NEXT
NEXT

sortieordonner:
grid. visible = TRUE
END



Plusieurs choses à commenter :
1. La méthode de tri choisie est appelé "Tri à bulle".
Sur Internet, vous trouverez l'explication de cet algorithme de tri
      (je l'ai tiré de là )



2.
Pour être insensible à la casse,
on convertit des chaînes en majuscules en utilisant UCase$ et ensuite on les compare.
3. Si on clique sur la colonne des images elles sont ordonnées selon leur chemin d'accès.