Selectionner des lignes de listbox par code entité sélection

Bonjour,

Soit une listbox “maBelleLB” contenant différentes colonnes.
Soit une sélection d’entités présentes et affichées dans la listbox.

le code suivant a pour objet de sélectionner toutes les lignes de la listbox :

LISTBOX SELECT ROW (*;“maBelleLB”;0;lk replace selection)
Dans les propriétés de la listbox, les éléments sélectionnés sont définit en tant que : Form.entitySelection

Est-ce normal que Form.entitySelection.length retourne 0 ?

Patrick

A priori, je dirais non… :-?

C’est malheureusement ce que je crains.
Quelqu’un de chez 4D peut-il se positionner avant que je n’ouvre le Taow?

<code 4D>
// Selectionne toutes les lignes
LISTBOX SELECT ROW(*;“suiviDeCaisse”;0;lk replace selection)

ALERT(String(Form.caisseSelected.length)) // ----> = 0

// déselectionne toutes les lignes
LISTBOX SELECT ROW(*;“suiviDeCaisse”;0;lk remove from selection)
</code 4D>

Si j’enlève la dernière ligne, la première exécution donne 0, la seconde exécution donne le bon résultat, celui qui est attendu en première instance

J’ai essayé en ajoutant:
Form.xxx:=Form.xxx
delay process
redraw window

rien, aucun effet

Patrick

Encore un problème de délai de rafraichissement… :roll:

je viens d’ouvrir un incident car cela n’est pas normal.
Je ne me vois pas expliquer à l’utilisateur qu’il doit avant sélectionner le contenu de sa LB avant de lancer une impression

Patrick

Juste une question (parce que je viens de tester et pour moi ça marche très bien en v17.0)

Comment appelez-vous le formulaire dans lequel s’affiche votre listbox ?

design :
[]25931011;“Mode Design”[/]

runtime
[]25931016;“Mode Runtime”[/]

Roland Lannuzel

Bonjour Roland,

j’appelle la LB comme vous, par son nom d’objet
et utilise la ligne ‘Selected Items’ uniquement.
La ligne ‘Current Item’ ne permettant pas le rafraichissement de la LB en cas de modification par langage ORDA (bug déposé par Manuel P.).

J’ai ouvert un incident Taow et y ai joint une base exemple

Patrick

Précision: pas de rafraichissement de la listbox quelque soit la façon de modifier (le contenu de la listbox) que ce soit par du code 4D (old school) ou du code en langage ORDA :frowning:
(Cf. bug ACI0098644)

Autre point, si le code est exécuté 2 fois (2 évènements ou autre),
alors il y a sélection, mais jamais la première fois lorsque le
formulaire est ‘tout frais tout neuf’.

: Patrick EMANUEL

la première exécution donne 0, la seconde exécution donne le bon
résultat, celui qui est attendu en première instance

Attention, il s’agit bien de la taille de l’entity selection qui n’est pas rafraichie et non pas la listbox où la selection des lignes se fait bien… :wink:

Pour faire, simple, au début, il y avait une listbox avec un nom un peu bizarre, suiviDeCaisse, qui se sentait seule et qui a reçu un grand nombre d’entité par une instruction du genre.

<code 4D>
form.lb:=ds.MaTable.all()
</code 4D>
Puis, devant cet affluence d’informations, l’utilisateur se dit : une impression s’impose, l’écran me bousille les yeux et de toute manière, mon utilisateur se moque des arbres, donc il décide d’imprimer sa liste de 25 pages :wink:

Pour cela, il clique sur le bouton imprimer et là, rien !

<code 4D>
// Selectionne toutes les lignes
LISTBOX SELECT ROW(*;“suiviDeCaisse”;0;lk replace selection)

ALERT(String(Form.caisseSelected.length))//---->= 0
</code 4D>

Mais en sortie, toutes les lignes de la listboxsont sélectionnées, surligné d’un bleu aveuglant, alors il clique une seconde fois sur imprimer pour se débarrasser de ce bleu (dans le doute) et là, miracle, sans cierge cela s’imprime car la sélection du premier essai a été prise en compte en tant que entity selection.

Résultat : pour une impression, cliques 2 fois => fait 2 fois ta demande ou alors, sélectionne avant.
Hé bien, mon utilisateur, il aime pas du tout :!:

Voila le scénario reproduit dans la base exemple, mais je peux aussi me tromper et avoir fait fausse route :wink:

Juste une question bête, dans ta user story: si c’est juste pour tout selectionner pour pouvoir lancer une impression pourquoi tu ne fais pas directement:
<code 4D>
Form.caisseSelected:=Form.lb
utliser entity selection(Form.caisseSelected)
imprimer selection([table])

</code 4D>

:-? ce qui me choque en écrivant ce code c’est qu’à la sortie les lignes ne sont PAS selectionnées dans ma listbox :?: :!: :roll:

C’est parce que l’utilisateur peut faire une sélection au travers de sa listbox, et puis ce serait trop simple :wink: car l’impression est un exemple, l’autre est l’export formaté ou sur Excel

Patrick

J’ajouterai que je sélectionne toutes les lignes visibles si il n’y a aucune sélection initiale.

Ça ne te choque pas qu’en modifiant (par programmation) l’entité selection affectée à la propriété “Éléments selectionnés” de la listbox, la listbox ne reflète pas cette modification ?

ben si, c’es un peu le bug complémentaire du mien avec le LISTBOX SELECT ROWS.
Au moins, il y a une constance :mrgreen:

<Bon, vendredi c’est que demain>

Par contre, tu peux me réexpliquer ce que tu cherches à faire exactement, car je n’ai pas bien compris :oops:

Si tu veux imprimer soit tout soit la selection de l’utilisateur tu testes la taille de l’ES avant de tout selectionner si elle est vide.

le code devient:
<code 4D>
si(Form.caisseSelected.lenght=0)
Form.caisseSelected:=Form.lb //pour tous selectionner
LISTBOX SELECT ROW(*;“suiviDeCaisse”;0;lk replace selection) // pour raffraichir la listbox
fin de si
utiliser entity selection(Form.caisseSelected)
imprimmer selection([table])// ou tout autre traitement sur ta selection

</code 4D>

j’ai une LB qui peut contenir une sélection réalisée par
l’utilisateur, dans ce cas, j’utilise la sélection de l’utilisateur ou
bien aucune sélection, et dans ce cas, je prend tout le contenu de la
LB.

Ce qui me gène dans ton code, c’est que la ligne

Form.caisseSelected:=Form.lb //pour tous selectionner

fait pour un contournement du problème.
En effet, la ligne
<code 4D>
LISTBOX SELECT ROW(*;“suiviDeCaisse”;0;lk replace selection)
</code 4D>
fait la sélection qui doit être reprise par la propriété “Selected Items” de la LB.
C’est d’ailleurs le cas lorsque tu passes une seconde fois. Il y donc un problème lors de la première passe où la sélection réalisée par cette commande n’est pas prise en compte.

Patrick

dixit la doc: La commande LISTBOX SELECT ROW provoque la sélection de la ligne de numéro positionLigne dans l’objet list box désigné par les paramètres objet et *.