PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Powerscripts
  •  » [RESOLU] DropDownDataWindow : la 1ère sélection est vide

#1 15-05-2008 18:33:03

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

[RESOLU] DropDownDataWindow : la 1ère sélection est vide

Bonsoir,

Je rencontre un petit soucis que je ne parviens pas à résoudre.

J'ai une fenêtre dans laquelle j'ai un control nommé "dw_payment_type" et de type ddw_payment_type : si j'ai bien compris, c'est une DropDownDataWindow.
Dans ma ddw_payment_type, j'ai un label (nom de colonne) + une colonne nommée "payment_type" et de type d_payment_type_edit_list (dataWindow).
Dans ma d_payment_type_edit_list j'ai deux colonnes : paytyp_str et paytyp_id. Seul paytyp_str est visible. Une procédure me fournit les données : 14 rows. Bien que paytyp_id soit invisible, il est bon de savoir qu'il varie de 1 à 16 inclus.

Le but du jeu c'est donc d'avoir une liste déroulante dans ma fenêtre, pré-remplie avec les données fournies.
Seulement voilà : lorsque ma fenêtre s'affiche, j'ai bien mes données dans la liste déroulante... Sauf que la première donnée - celle affichée tout en haut de la liste et visible lorsque la liste est fermée - est vide !
Parfois il y a un "1" ou un "0" dedans.
Pour y remédier je souhaite forcer la sélection de la première donnée retournée, de sorte qu'il ne puisse pas y avoir de sélection "vide".

Voici comment je procède. Dans ma fenêtre j'agis comme ceci :

Code: pb

dw_payment_type.insertRow(0)

datawindowchild ldw_child
dw_payment_type.GetChild('payment_type', ldw_child)
ldw_child.SetTransObject(SQLCA)
ldw_child.retrieve()

ldw_child.setrow(1)


Le premier élément est bien sélectionné et surligné, toutefois il n'apparait pas dans la "case" de ma liste déroulante quand elle est fermée. C'est lorsque je l'ouvre/la déroule qu'on voit que le premier élément est sélectionné.

J'ai bien tenté de manipuler setrow()/ScrollToRow() sans succès : ma sélection n'apparait pas dans la "case" du haut.
J'ai pu lire sur le forum qu'il fallait se tourner vers un setItem() dans le retrieweEnd() : je n'y suis pas vraiment parvenu et je ne vois pas trop comment faire. Si c'est le retrieweEnd() de dw_payment_type, cela n'est pas affecté par l'instruction "ldw_child.retrieve()"... Si ?

Bref, je recherche une solution simple pour sélectionner mon élément. setRow() le fait plutôt bien, si ce n'est que l'élément de la liste sélectionné n'apparait pas en tête de liste... Et que mon champ reste vide.

Auriez-vous une idée ? Un conseil ? Une remarque ? Une suggestion ?
Merci pour votre aide, encore une fois ;-)

Dernière modification par Nyphel (16-05-2008 08:45:25)

Hors ligne

 

#2 15-05-2008 18:54:48

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] DropDownDataWindow : la 1ère sélection est vide

Bonsoir,

Ton problème vient du fait que ta datawindow, dw_payment_type,  n'est pas alimentée.

Quand tu fait le retrieve sur ta datawindowchild, ddw_payment_type, tu récupère bien les donnée que tu veux mais powerbuilder s'arette là. Il n'essaie pas d'affecter a ta datawindow le champ selectionné dans ta datawindowchild.

Bref en gros il faut initialiser l'alimentation ta datawindow avec le contenu de ta datawindowchild.

Je reprends ton code avec le bout qu'il te manque :

Code: pb

dw_payment_type.insertRow(0)

datawindowchild ldw_child
dw_payment_type.GetChild('payment_type', ldw_child)
ldw_child.SetTransObject(SQLCA)
ldw_child.retrieve()

ldw_child.setrow(1)

//Je force l'affichage de ce champ dans ma datawindow
dw_payment_type.SetItem(1, "payement_type", ldw_child.GetItemNumber(1,"payment_type"))

Je dois avouer que j'ai un peu mal aux a cette heure ci de la journée donc j'ai pu passer a coté d'une de tes explications, j'essaierais de me relire demain à tête reposée.

Bonne soirée

Dernière modification par Nephtis (15-05-2008 18:55:12)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#3 15-05-2008 19:01:26

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] DropDownDataWindow : la 1ère sélection est vide

Cela me retourne une erreur :
Invalid row/column specified at line... function...

Je crois comprendre ce que tu veux dire, je vais creuser la chose demain matin. Merci pour le conseil !


Edition
Ceci fonctionne :

Code: pb

dw_payment_type.SetItem(1, "payment_type", "test")

J'avais pourtant déjà essayé le SetItem, mais je m'y prenais mal. Je faisais un SetItem sur ldw_child au lieu de dw_payment_type... Mais maintenant je comprends le problème grâce à tes explications.
Par contre je ne parviens pas à faire fonctionner le GetItemNumber().

Sinon j'ai aussi trouvé cette syntaxe qui semble résoudre totalement mon problème :

Code: pb

dw_payment_type.object.payment_type[1] = string("1")

Cela force la sélection du premier élément de la liste déroulante.
Je pense que je peux tagger le post comme résolu, merci bien pour ton aide !

Dernière modification par Nyphel (16-05-2008 08:45:06)

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » [RESOLU] DropDownDataWindow : la 1ère sélection est vide

Pied de page des forums

Propulsé par FluxBB 1.2.22