PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Combo avec une variable tableau
Combo avec une variable tableau
Débuté par THIERRY TILLIER, 06 oct. 2017 11:57 - 24 réponses
Membre enregistré
1 167 messages
Posté le 06 octobre 2017 - 11:57
Bonjour,

J'ai un combo que je rempli avec une variable de type tableau de chaine. (pas par programmation mais dans l'onglet Contenu).
La combo se rempli bien mais si je veux affecté une valeur il ne se passe rien :

COMBO_Fonction=T_Salarié.FonctionSalarié


L'option gLien est bien activé.
Est-ce normal de ne pas pouvoir le faire ? Suis obligé de remplir la combo par programmation ?
Merci d'avance de votre aide
Thierry
Membre enregistré
352 messages
Posté le 06 octobre 2017 - 12:23
Membre enregistré
1 167 messages
Posté le 06 octobre 2017 - 12:34
Merci Romulus mais je ne cherche pas à modifier une donnée mais à sélectionné un élément connu dans la combo
Membre enregistré
352 messages
Posté le 06 octobre 2017 - 14:01
Pourtant, dans votre premier message, vous vouliez faire une affectation :

THIERRY TILLIER a écrit :
> La combo se rempli bien mais si je veux affecté une valeur il ne se passe rien :

Je n'ai jamais remplie de champ combo par databinding (j'ai fait exclusivement sur des champs tables pour l'instant), mais je dirais que vous pourriez faire appel à la propriété ..ValeurAffichée
Membre enregistré
1 167 messages
Posté le 06 octobre 2017 - 14:27
La propriété ..ValeurAffichée est en lecture seule. En fait ce n'est pas du DataBinding, j'utilise les données de ce combo dans plusieurs fenêtres différentes. Et plutôt que d'associer ces combo à une requête que je devrais exécuter à chaque fois, le rempli une variable tableau à l'ouverture de mon application. Et ce tableau devient la source (contenu) des combo. L'onglet Liaison n'est donc pas utilisé - pas de databinding.

Le code indiqué plus haut fonctionne dans tous les autres modes , sauf quand la combo à pour source une variable tableau.
Pour réussir à le faire, je suis obligé de remplir par programmation (ListeAjoute) le contenu des combo. C'est un peu balo!
Membre enregistré
352 messages
Posté le 06 octobre 2017 - 14:56
Je comprends désormais votre raisonnement, qui n'a pas été simple à comprendre, à vrai dire.
J'ai fait un exemple où j'ai déclaré une variable tableau de chaines qui s'appelle gf_tab avec ces valeurs initiales :
gf_tab est un tableau de chaînes=["toto", "momo", "zonzon"]


J'ai ensuite ajouté un bouton pour modifier l'intitulé du 1er élément:
gf_tab[1]="azerty"
ListeAffiche(COMBO_SansNom1)
Message modifié, 06 octobre 2017 - 14:56
Membre enregistré
1 167 messages
Posté le 06 octobre 2017 - 15:26
Non, je veux juste pourvoir sélectionner et afficher une valeur présente dans ma combo en faisant :

COMBO_Fonction=T_Salarié.FonctionSalarié
//ou
COMBO_Fonction="RH"
//ou
COMBO_Fonction=varUneFonctionSalarié


Ma combo est paramétrée comme suit :



Message modifié, 06 octobre 2017 - 15:27
Membre enregistré
352 messages
Posté le 06 octobre 2017 - 15:46
Il faut faire appel à la fonction ListeSelectPlus
Posté le 08 octobre 2017 - 11:22
THIERRY TILLIER avait prétendu :
Bonjour,

J'ai un combo que je rempli avec une variable de type tableau de chaine. (pas
par programmation mais dans l'onglet Contenu).
La combo se rempli bien mais si je veux affecté une valeur il ne se passe
rien :

COMBO_Fonction=T_Salarié.FonctionSalarié


L'option gLien est bien activé.
Est-ce normal de ne pas pouvoir le faire ? Suis obligé de remplir la combo
par programmation ?
Merci d'avance de votre aide
Thierry


Je viens de faire un test :
init fenetre:
gf_tab est un tableau de chaînes=["toto", "momo", "zonzon"]

Une combo avec toutes les valeurs par défaut et contenu gf_tab partout

si je fais Combo_Nom = "momo" c'est bon

Avec ou sans gLien qui n'est pas actif utile si la combo n'est pas
remplie par programmation.

Peux-être recréer la combo avec les valeurs par défaut pour éliminer un
coche resté en chemin.

Peux-t-on voir le tableau ?

--
Cordialement,
Pierre
Posté le 08 octobre 2017 - 11:29
Attention que la combo_ est sensible à la casse

si Macombo = "momo" passe, Macombo = "MOMO" ne passe pas.

--
Cordialement,
Pierre
Posté le 09 août 2022 - 14:26
Bonjour Thierry,

Après des heures et des heures à tourner en rond sur l'aide PCSoft et sur les différents forums, je tombe enfin un post qui présente le problème que j'essaie de résoudre.

Malheureusement, les propositions qui te sont faites ici ne répondent pas à mon souci, pourtant identique au tien.
As-tu trouvé une solution ?
Membre enregistré
3 760 messages
Posté le 10 août 2022 - 07:19
Salut Thierry,
Pour sélectionner une ligne du combo liste, il faut utiliser son Indice.
<Champ Liste> = Indice
Si ta liste contient plusieurs éléments, il faut donc chercher l'indice qui contient l'élément
<Résultat> = ListeCherche(<Champ Liste> , <Élément recherché> [, <Type de recherche> [, <Début de la recherche>]])
Le résultat est l'indice recherché
J'espère avoir répondu à ta question correctement.
Membre enregistré
3 760 messages
Posté le 10 août 2022 - 07:23
Désolé, je voulais dire
Salut Bolid
Posté le 10 août 2022 - 08:52
Salut Popoy,

Merci pour ta réponse, mais elle ne correspond pas à ma problématique.

Le combo se trouve dans une colonne de table.
Le contenu de cette colonne-combo est une variable globale (= tableau d'instances d'objet).





Mon objectif est de permettre de saisir une valeur à partir de cette colonne-combo directement dans la table.

A l'affichage de la table, j'accède à la colonne-combo mais le combo est vide, bien que mon tableau d'instances d'objet soit correctement chargé (des traces me le prouvent).

Si je remplace le contenu de la colonne-combo par un fichier, le combo est rempli.

Je cherche à comprendre pourquoi ma colonne-combo est vide dans le cas où son contenu est alimenté par variable (et, accessoirement, à faire en sorte qu'elle ne soit pas vide ;)).
Membre enregistré
287 messages
Posté le 10 août 2022 - 11:01
> Je cherche à comprendre pourquoi ma colonne-combo est vide dans le cas où son contenu est alimenté par variable (et, accessoirement, à faire en sorte qu'elle ne soit pas vide )

Tout dépend à quel moment ton tableau a été remplis, tu peux faire un table affiche à la fin d'initialisation de ta fenêtre pour être sur que les données soient affichées

--
#DKR
Membre enregistré
1 167 messages
Posté le 10 août 2022 - 11:48
Mon post date un peu, je suis passé à autre chose et je ne me souviens plus comment j'ai solutionné ce problème.
Je regarderai ce soir ou demain le code de l'appli (qui tourne depuis 2017 chez un client).

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Tuto WINDEV sur ma chaîne Youtube
Membre enregistré
4 328 messages
Posté le 10 août 2022 - 12:21
Bonjour,
Popoy a écrit :
Pour sélectionner une ligne du combo liste, il faut utiliser son Indice.
<Champ Liste> = Indice

Pas dans le cas présent où il y a une valeur mémorisée. Il faut bien une valeur (et pas l'indice) à la combo/liste.

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 760 messages
Posté le 10 août 2022 - 14:54
De toute façon Bolid n'avais pas précisé
Que c'était a l'intérieur d'une table
Si j'avais eu cette info, je n'aurai même pas répondu
Membre enregistré
1 167 messages
Posté le 10 août 2022 - 18:17
Bonsoir Bolid

Après relecture de mon programme, nos cas sont différents, Mon combo n'était pas dans un champ table. J'ai du remplir ma combo avec une requête et par programmation.

Dans ton cas, il faut que la combo soit remplie avant la création de la table (puisque tes données sont dynamiques).
Une solution est donc de remplir d'abord le tableau puis ensuite la combo, puis de sélectionner la valeur. Ou bien une fenêtre interne avec le combo et utiliser une colonne conteneur, de cette manière le remplissage est hors du champ table.
Quelle que soit la solution, le champ combo sera "dissocié" des données de remplissage du tableau, et donc nécessite un traitement spécifique.

Je n'ai pas testé mais cela peut être une piste... à moins que d'autres aient des idées plus intéressantes.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Tuto WINDEV sur ma chaîne Youtube
Posté le 10 août 2022 - 19:46
404 ERROR a écrit :
Je cherche à comprendre pourquoi ma colonne-combo est vide dans le cas où son contenu est alimenté par variable (et, accessoirement, à faire en sorte qu'elle ne soit pas vide )

Tout dépend à quel moment ton tableau a été remplis, tu peux faire un table affiche à la fin d'initialisation de ta fenêtre pour être sur que les données soient affichées

--
#DKR


Salut 404 Error,

Merci pour tes propositions

Ma variable globale contenant les valeurs qu'il faudrait afficher dans ma colonne-combo est alimentée dans la procédure "Fin d'initialisation" de la fenêtre où j'affiche la table contenant ma colonne-combo.
J'ai effectivement un TableAffiche() après alimentation de la variable globale.

Comme je remplis ma table dans une boucle avec un TableAjoute(), j'ai même testé l'ajout de l'alimentation de ma variable globale et du TableAffiche() juste après le TableAjoute() : rien n'y fait, le combo est toujours vide...
Posté le 10 août 2022 - 20:10
THIERRY TILLIER a écrit :
Bonsoir Bolid

Après relecture de mon programme, nos cas sont différents, Mon combo n'était pas dans un champ table. J'ai du remplir ma combo avec une requête et par programmation.

Dans ton cas, il faut que la combo soit remplie avant la création de la table (puisque tes données sont dynamiques).
Une solution est donc de remplir d'abord le tableau puis ensuite la combo, puis de sélectionner la valeur. Ou bien une fenêtre interne avec le combo et utiliser une colonne conteneur, de cette manière le remplissage est hors du champ table.
Quelle que soit la solution, le champ combo sera "dissocié" des données de remplissage du tableau, et donc nécessite un traitement spécifique.

Je n'ai pas testé mais cela peut être une piste... à moins que d'autres aient des idées plus intéressantes.

--


Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Tuto WINDEV sur ma chaîne Youtube


Bonsoir Thierry,

Merci à toi pour ta réponse et pour le temps que tu as dû passé à fouiller dans ton passé (5 ans déjà...) !

Entre ton commentaire et celui de 404 Error, j'ai compris où placer l'alimentation de ma source de valeur associé au combo :
Je plaçais cette alimentation dans la procédure "Fin d'initialisation" de la fenêtre, donc après que la fenêtre ait créé la Table...

En plaçant cette alimentation dans la procédure "Initialisation" de la Table, mon Combo est alimenté !!!
Pour info, ça marche également si on place cette alimentation dans la procédure "Déclaration globales" de la fenêtre, mais je ne trouve pas que ça soit l'endroit...

Les gars, vous avez rendu un homme heureux !
Un grand merci Thierry et 404 Error ainsi qu'à tous ceux qui se sont penchés sur mon problème.
Membre enregistré
287 messages
Posté le 11 août 2022 - 11:54
@Bolid je t'en prie, c'est toujours un plaisir d'aider :D

--
#DKR
Message modifié, 11 août 2022 - 11:55
Membre enregistré
25 messages
Posté le 03 octobre 2022 - 00:25
Thierry, si j'ai bien compris ta problematique de l'époque, certes ancienne, mais cela peut interesser du monde

Pour que cela fonctionne voila la marche a suivre

creer :

1) un type structure avec au moins 2 elements, ici par exemple "personne" comprenant nom et fonction

2) un tableau de structure personne

3) dans la description de la combo tu rentre (par ex)
source parcourue = tabpers
variable affichée = tabpers.nom
variable memorisee = tabpers.fonction_

personne est une structure
nom est une chaîne
fonction_ est une chaîne // le tiret car fonction est un nom réservé
FIN
tabPers est un tableau de personne



Le tableau sera rempli au préalable dans l'appli et voila!!!

Attention Il faut bien choisir ce qui est affiché et mémorise, car seule la valeur mémorisée permet de faire modifier l'affichage de la combo
Message modifié, 03 octobre 2022 - 00:28
Membre enregistré
25 messages
Posté le 03 octobre 2022 - 07:49
Evidemment rien n’empêche de prendre dans la structure comme 2eme élément un élément de valeur identique au premier (en l'appelant differemment ex nom1 et nom2) , ce qui permet d'avoir une combo ou la valeur enregistrée n'est pas l'index de la liste mais la valeur elle même., avec les possibilités de changement de valeur de la combo comme le cherchait Thierry
Message modifié, 03 octobre 2022 - 07:51
Membre enregistré
25 messages
Posté le 03 octobre 2022 - 09:57
Je viens de tester (v26) dans le cas ou l'on veut que la variable affichée soit identique a la variable memorisée, il suffit de creer la structure avec uniquement un element (par ex nom) et de mettre a la fois dans les 2 cas cet élément

voir image ci dessous