Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
J'ai un problème que je ne sait pas comment résoudre :
J'ai une datawindow de type tabular qui est sensée afficher x lignes. Dans cette dw il y a deux colonnes : Marque et Gamme (les deux sont des dropdown)
La dropdown Gamme dépend de la dropdown Marque. C'est à dire que je veux n'afficher que les gammes de la marque choisie.
Le problème c'est que lors du changement de la marque je ne peut pas faire un getchild puis un Retrieve sur la gamme car il referais le retrieve de la colonne Gamme pour toutes les lignes. Et ca serais le même problème avec un filter....
Est-ce que quelqu'un aurait une idé car la je sèche....
Merci d'avance
Dernière modification par bombseb (08-01-2009 09:59:33)
Hors ligne
bonjour,
la solution, la pour la colonne gamme, tu passes via un bouton de recherche....qui dependra de la valeur de la colonne marque.
au niveau de ta dw, tu affiches juste le libellé.
c'est comme ca que je procede.
A++
Hors ligne
Bonjour bombseb,
Pour ma part j'utilise une solution différente transparente pour l'utilisateur.
Je créé un nouveau champs pour la colonne gamme, cpt_gamme, qui va contenir la dddw filtrée, celle qui apparait à l'écran. Le champs code_gamme va être un champs caché dans lequel toute les gamme de toute les marques apparaissent. Ainsi la bonne valeur pour chaque ligne sera tout le temps positionnée et c'est celle ci que tu updateras.
Lorsque l'utilisateur change le champs cpt_gamme, tu positionne aussi à la meme valeur le champ code_gamme.
Ainsi, lorsque tu fais le retrieve de ta dropdown sur le champ cpt_gamme, les libellés gammes des autres lignes vont disparaitre et tu n'auras plus qu'à copier le libellé du champs code_gamme dans cpt_gamme.
Le code est très simple, apres chaque retrieve de la dropdown :
for i=1 to dw_1.rowcount() //rq on recupere le libelle de la gamme li_num=ldw_code_gamme.Find ( "code_gamme = '"+ dw_1.getitemstring(i,"code_gamme") + "'", 1, ldw_code_gamme.rowcount()) if li_num>0 then ls_libelle_gam = ldw_child2.getitemstring(li_num,"libelle_gamme") else ls_libelle_gam = "" end if //rq on met le libelle dans le compute if dw_1.getitemstring(i,"code_gamme")<>"" and not(isnull(dw_1.getitemstring(i,"code_gamme"))) then dw_1.setitem(i,"cpt_gamme",ls_libelle_gam) end if next
et dans l'itemchanged, pour quand l'utilisateur sélectionne la gamme :
ls_gamme=dw_1.getitemstring(dw_1.getrow(),"cpt_gamme") dw_1.setitem(dw_1.getrow( ),"code_gamme",ls_gamme)
Hors ligne
oh mais c'est une bonne idée ca ....
je pense que je vais faire légerement différement....
sur le rowfocuschanged je fait un retrieve de la dropdown gamme en fonction de la marque de la ligne courante, et en même temps :
- je rend invisible le compute et visible la dropdown pour la ligne courante
- je rend visible le compute et invisible la dropdown pour les autres lignes
Merci de votre aide !
Hors ligne
bombseb a écrit:
oh mais c'est une bonne idée ca ....
je pense que je vais faire légerement différement....
sur le rowfocuschanged je fait un retrieve de la dropdown gamme en fonction de la marque de la ligne courante, et en même temps :
- je rend invisible le compute et visible la dropdown pour la ligne courante
- je rend visible le compute et invisible la dropdown pour les autres lignes
Merci de votre aide !
De rien
Quant à ton adaptation, cela devrait fonctionner tout aussi bien
Quand cela sera au point, n'oublie pas de mettre [RESOLU] dans le titre du sujet.
Hors ligne
Pages: 1