PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WEBDEV 2024 → ComboBox et zones répétées
ComboBox et zones répétées
Iniciado por guillaume.ruelle, nov., 03 2005 8:42 AM - 1 resposta
Publicado em novembro, 03 2005 - 8:42 AM
Bonjour,

Je rencontre un comportement qui m'ennuie et je viens vers vous pour savoir si certains ont réussi à trouver une solution :

Je crée une combobox dont le contenu est automatiquement récupéré d'un fichier et dont la valeur mémorisée est différente de celle affichée. Si je teste la valeur retournée par cette combo dans le code serveur de modification de celle-ci, pas de souci, c'est bien la valeur mémorisée qui est renvoyée telle qu'indiquée dans la description.

Problème, si je positionne cette combo dans une zone répétée (il n'est pas question ici de contenu différent en fonction de chaque répétition), la valeur retournée n'est pas la valeur censée être mémorisée mais l'indice de l'élément sélectionné dans la liste.

En bref, j'en viens à imaginer des bricolages en cachant un clone de cette combo en dehors de la zone répétée pour lui donner l'indice renvoyé par la combo de la zone répétée et pouvoir ainsi récupérer la bonne valeur mémorisée, mais c'est une bidouille qui ne me plait pas beaucoup (et qui est assez lourde en plus).

Merci d'avance pour votre aide

Cordialement

--
Guillaume
Publicado em janeiro, 06 2006 - 11:30 AM
Bonjour,

J'arrive peut-être un peu tard avec ma solution (question postée en novembre, on est en janvier !) mais je pense que ça peut quand même vous intéresser ainsi que d'autres.

J'ai donc rencontré le même pb et j'ai fini par comprendre que la combo que l'on paramètre dans la ZR est une sorte de "modèle" et se comporte exactement comme on le souhaite. Si on remplit la liste par un fichier ou une requête, la combo est bien en mesure de renvoyer par ex. l'Id de l'enregistrement sélectionné et non l'indice de la position dans la combo.

Les combos réellement affichées dans la ZR, n'ont effectivement plus ce comportement et renvoient toujours l'indice de la position de l'élément sélectionné, ceci par l'intermédiaire de l'attribut correspondant à la combo dans la ZR (ATTxxx).

On a donc un pb de correspondance entre l'indice de position des éléments dans les combos et la valeur que l'on veut réellement utilisée (ex : Id d'enregistrement) pour :
1- Initialiser les combos
2- Récupérer le choix de l'utilisateur

Ma solution fonctionne avec une ZR mémoire et donc en ajoutant les lignes de ZR par programmation.

Nommons la ZR : MaZR, la combo "modèle" (que l'on dessine dans la ZR) : MaZRCombo et l'attribut correspondant dans la ZR : ATT_MaZRCombo.

1- Pour initialiser la combo de chaque ligne (à placer dans le code d'init serveur de MaZR) :

HLitPremier(MaTable)
// Boucle sur chaque enregistrement
TANTQUE PAS HEnDehors(MaTable)
MaZRCombo=MaTable.ChampId
ZoneRépétéeAjouteLigne(MoiMême, ListeSelect(MaZRCombo), ...)
LitSuivant(MaTable)
FIN

où MaTable est le nom de la table qui alimente la ZR et ChampId le nom du champ dans lequel on stocke l'Id choisi (valeur mémorisée par la combo).

2- Pour récupérer les choix de l'utilisateur (à placer dans le code de validation du formulaire, par ex.) :

POUR i=1 A MaZR..Occurrence
IdChoisi = ZRCombo[ATT_ZRCombo[i]]..ValeurMémorisée
// Traitement de IdChoisi
// Ex : MaTable.ChampId = IdChoisi
// après positionnement sur le bon enreg de MaTable, of course ;)
FIN

où i est l'indice de la ligne de la ZR.

Voilà, j'espère que c'est assez clair. En tout cas on évite les clones, les champs cachés et autres bricolages (et leurs effets de bord...)

Bon WebDev !!

Cordialement,
Magali.