Gambas France BETA


Pas de compte ? Incription

Trier les lignes dans le code de la columnview

Ce sujet est résolu.

1
AuteurMessages
spheris#1 Posté le 3/3/2024 à 09:06:21
Bonjour,
Tout est dans le titre.

Je dispose d'un tableau avec 3 colonnes.
(id, nom, adresse), id étant le numéro d'index d'un contact, numéro unique de type integer.

Lorsque je clique sur l'entête de colonne id, toutes les lignes se trient du plus grand au plus petit.

Comment réaliser par défaut ceci dans le code à l'ouverture de la fenêtre ?
Merci pour vos réponses.

;)
valaquarus#2 Posté le 3/3/2024 à 10:37:13
-- Unus Ex Altera --Bonjour Sphéris,
ton tableau est il alimenté par une base de données ou non ?
Système d'exploitation : KDE neon 6.0.2 ~ Version Gambas : 3.19.90
valaquarus#3 Posté le 3/3/2024 à 10:49:15
-- Unus Ex Altera --Si oui je te propose ceci qui au départ est pour un gridView mais le raisonnement reste le même :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
PUBLIC SUB GridView1_ColumnClick(Column AS INTEGER) 'tri des colonnes du GridView

DIM Values, ValueSorted AS NEW String[]
DIM Nx, iNx AS INTEGER
' Dim ordre As String = "ORDER BY " 'déclarée en Public

IF db.Current.Opened = FALSE THEN
db.Current.Open
ENDIF

IF triOK THEN 'retour de sélection
triEncours = triSQL & triSel & ordre
ELSE
triEncours = triSQL & ordre
ENDIF

SELECT CASE Column 'en fonction de la colonne

CASE 0
IF monTri = "numero" THEN
triEnCours = triEnCours & monTri & " DESC"
monTri = ""
FMain.leTri = "Numéro DESC"
ELSE
monTri = "numero"
triEnCours = triEnCours & monTri & " ASC"
FMain.leTri = "Numéro ASC"
END IF
GridView1.Tooltip = ""


CASE ELSE 'GridView1_ColumnClick(Column As Integer)

GridView1.Tooltip = ("Cliquer au moins deux fois\n" & "sur les entêtes des champs calculés\n" "pour bien les ordonner.")
FMain.Mouse = Mouse.Wait
FMain.beep

FOR Nx = 0 TO GridView1.Rows.Max
Values.Add((GridView1[Nx, GridView1.Columns.Sort].Text))
NEXT

ValueSorted = Values.Copy()
ValueSorted.Sort((IIf(GridView1.Columns.Ascending, gb.Ascent, gb.Descent)))

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()
GOTO sortie

END SELECT

FMain.triBase = triEncours

IF triOK THEN
triSelOrdre = Mid(triencours, RInStr(triEncours, triSel & ordre & monTri))
ELSE
triSelOrdre = Mid(triencours, RInStr(triEncours, ordre & monTri))
ENDIF

'****************************************
Resultat = DB.Current.Exec(FMain.tribase)
FMain.clef = FMain.Resultat.Index
'****************************************
GridRemplis()

sortie:
db.Current.Close()
FMain.Mouse = Mouse.Default
shade()

END


À l'ouverture il suffit de dire :
1
FMain.triBase = "SELECT * FROM maBase ORDER BY numero ASC"


ou ceci unquement si pas de base :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
GridView1_ColumnClick(Column AS INTEGER)

GridView1.Tooltip = ("Cliquer au moins deux fois\n" & "sur les entêtes des champs calculés\n" "pour bien les ordonner.")
FMain.Mouse = Mouse.Wait
FMain.beep

FOR Nx = 0 TO GridView1.Rows.Max
Values.Add((GridView1[Nx, GridView1.Columns.Sort].Text))
NEXT

ValueSorted = Values.Copy()
ValueSorted.Sort((IIf(GridView1.Columns.Ascending, gb.Ascent, gb.Descent)))

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

Tu changes GridView par ColumnView et ça devrait le faire.
Système d'exploitation : KDE neon 6.0.2 ~ Version Gambas : 3.19.90
Patrick#4 Posté le 3/3/2024 à 16:40:17
Bonjour,
Et la propriété Sorted tu l'as essayé ?
linuxos#5 Posté le 3/3/2024 à 16:53:23
Un peu de sel, de poivre et la crevette sera... Bonjour,
En effet, il y a la propriété 'Sorted' qui est déja présente
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
spheris#6 Posté le 3/3/2024 à 21:01:16
Merci pour vos réponses.

Valaquarus,
C'est bien une base de données qui alimente la columnview.
la requête sql que tu m'as donnée va faire l'affaire.
Mais je pensais qu'une commande dans la ColumnView existait du style :

1
ColumnView1[0].sorted = TRUE


Patrick,LinuxOS Sorted ne prend que la valeur True ou False ou il est possible de trier par ce que l'on veut?
Patrick#7 Posté le 4/3/2024 à 14:50:29
Sorted n'a l'aire de fonctionner que sur une colonne, j'ai posé dans la forge les classes pour Editer/Trier/Imprimer.
1