Tri listbox collection

Contrairement aux listbox sélection, les boutons de tri d’une listbox collection renseignée avec une entitySelection ne font rien, automatiquement parlant. Il y a moyen de les convaincre que trier sans se fatiguer a du bon ?

Arnaud, en fait le tri auto fonctionne correctement.
Hier il a eu un hic, un lièvre, un effet de bord… :roll:

Ce matin, c’est OK, tu peux tester “les prélèvements” ou “les rejets”. :sunglasses:

Flûte et zut, chez moi ça résiste.
Ma listbox est construite dynamiquement, sa propriété triable en structure est cochée, un test de cette propriété lk triable au runtime=1.

Donc je me demande si c’est un problème de sélection d’entités (ES) triée ou non. D’après https://doc.4d.com/4Dv17R3/4D/17-R3/Selections-d-entites.300-3961507.fr.html#3767334la doc> :
« Sélections d’entités triées vs Sélections d’entités non-triées »
« Note : Les sélections d’entités sur un datastore distant sont toujours triées. »
Premier point, si je travaille en C/S, je ne suis pas en contexte datastore distant, non ?

Second point, ma collection s’appelle “es” et est référencée dans Form. Que je requête sans tri :
<code 4D>
Form.es:=ds.INDIVIDU.query(“PK>:1”;$pkMin_l)
</code 4D>
ou avec tri :
<code 4D>
Form.es:=ds.INDIVIDU.query(“PK>:1”;$pkMin_l)
Form.es:=Form.es.orderBy(“PK desc”)
</code 4D>
la seconde ES est bien triée comme je l’entends, mais dans un cas comme dans l’autre Form.es.isOrdered() retourne Vrai et mes entêtes de listbox ne font toujours rien.
Je sèche…

Rien à voir, mais ta requête de query me choque l’oeil sans les espaces, je mettrais plutôt “PK > :1”.

Sinon tu ne dis rien sur le contenu que tu affiches pour tes colonnes de ta listbox ?

Ca ne répond pas à tes questions, mais pourquoi dans ta seconde requete tu ne fais pas directement :

Form.es:=ds.INDIVIDU.query(“PK>:1”;$pkMin_l).orderBy(“PK desc”)

: Arnaud DE MONTARD

Ma listbox est construite dynamiquement
Un bout de code pour voir ce que tu fais et comment tu le fais. :pray:

: Patrick

pourquoi dans ta seconde requete tu ne fais pas directement
parce que j’apprends dans la douleur, b… de m… :mrgreen:

: Manuel

Un bout de code pour voir ce que tu fais et comment tu le fais. :pray:
voilà :
<code 4D>
LISTBOX SUPPRIMER COLONNE(;$LB_t;1;LISTBOX Lire nombre colonnes(;$LB_t))
$table_l:=Table(->[INDIVIDU])
$viewName_t:=“T74output”
$def_o:=LB_definitionGet ($table_l;$viewName_t)
C_OBJET($col_o)
Pour chaque ($col_o;$def_o.column)
$formule_t:=$col_o.formula //nom du champ, à transformer en “This.nomDuChamp”
$field_p:=DB_comboGet (Num($formule_t)) //le champ est codé en long, on tradit en pointeur
Si (Ptr_isField ($field_p))
$i_l:=$i_l+1
$nomChamp_t:=Nom du champ($field_p)
$type_l:=Type($field_p)
$formule_t:=“This.”+$nomChamp_t
$col_t:=$LB_t+"_C"+Chaîne($i_l)
$head_t:=$LB_t+"_H"+Chaîne($i_l)
LISTBOX INSÉRER COLONNE FORMULE(;$LB_t;$i_l;$col_t;$formule_t;$type_l;$head_t;$nil_p)
Si ($col_o.header="
")
$col_o.header:=$nomChamp_t
Fin de si
OBJET FIXER TITRE(;$head_t;$col_o.header)
OBJET FIXER FORMATAGE(
;$col_t;$col_o.format)
OBJET FIXER ALIGNEMENT HORIZONTAL(;$col_t;$col_o.align)
LISTBOX FIXER LARGEUR COLONNE(
;$col_t;$col_o.width)
Fin de si
Fin de chaque
</code 4D>

  • $LB_t est le nom de la listbox
  • LB_definitionGet lit un fichier json qui définit des listbox sélection et retourne un objet, chaque définition ressemble à ça :
    “table”: 206,
    “name”: “T206output”,
    “column”: [
    {
    “align”: 4,
    “formula”: “20600001”,
    “format”: “### ### ##0;-### ### ##0;”,
    “header”: “PK”,
    “width”: 80
    },
    {
    “align”: 4,
    “formula”: “20600002”,
    “format”: “### ### ##0.00;-### ### ##0.00;”,
    “header”: “taux”,
    “width”: 90
    },
    {
    “align”: 3,
    “formula”: “20600003”,
    “format”: “U+4”,
    “header”: “debutValidite”,
    “width”: 80
    },
    {
    “align”: 1,
    “formula”: “20600007”,
    “format”: “”,
    “header”: “libelleTaux”,
    “width”: 150
    }
    ]
    Entre temps j’ai trouvé un exemple fonctionnel pour tenter de comprendre ce que je foire, mais la question reste ouverte.

t’as pas fini d’editer ton post quand je te répond non mais… :razz:

: Arnaud DE MONTARD
  • LB_definitionGet lit un fichier json qui définit des listbox
    sélection et retourne un objet, chaque définition ressemble à ça :

c’est une listbox collection/entity pas selection on est d’accord ?

Tu as bien lu : je recycle des définitions qui servaient à des listbox sélection pour en faire des listbox collection. Ça fonctionne… sauf le tri.

: Manuel PIQUET

t’as pas fini d’editer ton post
j’effaçais mes traces, une moche ligne de test :mrgreen:

T’as pas compris ma remarque: la listbox que tu utilises elle est bien du bon type collection/entity dans ta structure ?

Oui, source de données = “Collection ou entity selection” en structure.

Ton tri, il est sur une chaine, un numérique, une date ou des heures ?

pfff, quel idiot je fais :
$type_l:=Type($field_p)
$type_l:=Type($field_p->)
4d a raison, un pointeur ne se trie pas. Et comme il affichait quand même mes données correctement, je regardais tout sauf ça… :cry:

ca arrive :wink:

Attention tout de même, on est dans le forum v17 ! pas dans le forum R release donc Form convert to dynamic on connait pas ici :-?

Pourtant le titre de la rubrique le précise bien :

Les versions courantes (v17 – v16 – R-release):roll:

Désolé, on est bien dans https://forums.4d.com/Forum/FR/25106050/0/0/Le coin de 4D v17>… :razz: