PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Remplir une combo par programmation avec des variables objets
Remplir une combo par programmation avec des variables objets
Iniciado por yoann, 16,abr. 2024 16:39 - 9 respuestas
Publicado el 16,abril 2024 - 16:39
Bonjour a tous.

J'ai une combo, que je souhaite remplir par programmation a partir d'un tableau d'objet.

Voici ce que j'essai de faire

ListeSupprimeTout(COMBO_localisation)

tabTabTempLocalisation est un tableau de cLocalisations

POUR TOUT clLigneLocalisation de gTableauLocalisations

SI clLigneLocalisation.oBatiment.IDBatiment = COMBO_BATIMENT.ValeurMémorisée.IDBatiment ALORS

TableauAjouteRéférence(tabTabTempLocalisation, clLigneLocalisation)
FIN

FIN

COMBO_localisation = tabTabTempLocalisation


Mon tableau d'oject de localisation est correct, mais ceci laisse ma combo vide, j'ai essayé d'utiliser des méthode sur la combo pour la faire "rafraichir" mais sans succès.

J'ai une autre variante du code, qui me plus logique, mais la fonction ListeAjoute n'accepte pas cette écriture
ListeSupprimeTout(COMBO_localisation)

tabTabTempLocalisation est un tableau de cLocalisations

POUR TOUT clLigneLocalisation de gTableauLocalisations

SI clLigneLocalisation.oBatiment.IDBatiment = COMBO_BATIMENT.ValeurMémorisée.IDBatiment ALORS

ListeAjoute(COMBO_localisation,clLigneLocalisation)
FIN

FIN


C'est assez frustrant de ne pas arriver a faire quelques chose d'aussi basique :/. en tous cas merci pour votre aide.
Miembro registrado
328 mensajes
Popularité : +8 (10 votes)
Publicado el 16,abril 2024 - 18:17
Bonjour

Ta combo est elle bindé sur ta variable tableau ?

Il faudrait essayé via binding et que ta combo renvoi l objet

Sinon en manuel avec des listeselect plus et liste cherche.
Miembro registrado
3.893 mensajes
Popularité : +227 (347 votes)
Publicado el 16,abril 2024 - 21:00
Bonjour,
Dans ton ListeAjoute, tu utilise la totalité de l'objet, alors que c'est un de ses membres qu'il faut ajouter.

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 17,abril 2024 - 08:42
Bonjour Voroltinko,

Justement, j'ai besoin d'ajouter l'objet en entier.

Dans mon projet, les combos défini par les propriété de l'élément, dans les sources de données je fais ceci




J'ai besoin de faire la même chose, sur une combo vide, et par programmation. :)
Miembro registrado
3.893 mensajes
Popularité : +227 (347 votes)
Publicado el 17,abril 2024 - 09:37
D'après l'image tu n'affiche que Bâtiment.
Quoiqu'il en soit on ne peut pas afficher un objet en entier (un trace te le prouvera) sauf en créant un getter qui concatène les différents membres ou en utilisant une combo tableau

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 17,abril 2024 - 09:37
Miembro registrado
417 mensajes
Popularité : +6 (6 votes)
Publicado el 17,abril 2024 - 09:48
Bonjour,
Je ne sais pas quel est ton problème, mais par programmation, tu ne dois plus manipuler la COMBO, tu remplis juste ton tableau d'objet et tu rafraichi. Il n'y pas de Listeajoute
Publicado el 17,abril 2024 - 10:09
Bonjour Voroltinquo,

L'image était pour illustré ma manière dont j'utilise mes combos, J'ai des tableau d'objets que j'utilise pour alimenter le contenu.

Sources Parcourue : Mon tableau d'objet
Variable affiché : Un variable d'un des objets de mon tableau (ici bâtiment pour le nom du bâtiment)
Variable mémorisé : L'objet complet de la ligne sélectionné

Cette façon me permet après d'avoir accès a toutes les informations de l'objet sélectionné sans faire de requête supplémentaire ou autre. Ca me permet également d'affecté cet objet complet à une variable d'un autre objet etc...

Dans ma problématique initiale je parle de localisation car dans cette fenêtre toute simple je veux lier ces deux combos Bâtiment et localisation, Une fois un bâtiment sélectionné, simplement afficher la liste des localisation de ce dernier.

Je ne comprend pas pourquoi on peut faire un ListeAjoute(macombo, "test") et pas ListeAjoute(macombo, unligneDobjet) ou encore fichierVersEcran(mafenetre.macombo, monTableaudObjet)
Publicado el 17,abril 2024 - 10:21
bonjour Ralph IGCI

Merci beaucoup, effectivement, ca marche nickel en mettant à jours mon tableau d'objet et en faisant un listeAffiche() pour rafraichir la combo !!

ListeSupprimeTout(COMBO_localisation)

TableauSupprimeTout(gtabLocalisationDunBatiment)

POUR TOUT clLigneLocalisation de gTableauLocalisations

SI clLigneLocalisation.oBatiment.IDBatiment = COMBO_BATIMENT.ValeurMémorisée.IDBatiment ALORS

TableauAjouteRéférence(gtabLocalisationDunBatiment, clLigneLocalisation)
FIN

FIN

ListeAffiche(COMBO_localisation,taInit)


Merci a tous pour votre aide :)
Miembro registrado
2.574 mensajes
Popularité : +222 (260 votes)
Publicado el 17,abril 2024 - 10:28
Bonjour,

Pourquoi faire simple quand on peut faire compliqué ?

Il te suffit de Binder tes 2 combos sur tes 2 tableaux d'objets (source, valeur affichée, valeur mémorisée). Dans ta classe "Batiment", tu devrais avoir un tableau de localisation.

Tu devrais avoir une classe ViewModel qui contient ton tableau de Batiment, un objet de type Batiment que tu appellerais BatimentSélectionné

Lors de la sélection du batiment dans ta première combo, tu affectes l'objet sélectionné dans BatimentSélectionné et tu lance une méthode qui ira récupérer les localisations et les affichera dans la seconde combo par ListeAffiche().

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
32 mensajes
Publicado el 17,abril 2024 - 11:49
Salut,

as-tu essayer d'utiliser la propriété "FichierParcouru" du combo?

COMBO_localisation..FichierParcouru= tabTabTempLocalisation