Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
J'ai une dddw dans une datawindow. J'aimerai recupérer l'objet cliqué dans la dddw.
J'ai donc mis ce code dans l'event 'clicked' de la dw et ma chaine ls_string est toujours vide
this.getchild("code_produit",ldw_child1) ls_string = ldw_child1.GetObjectAtPointer() if ls_string <> '' then messagebox('youpi',ls_string) end if
Est ce que quelqu'un a une idée?
Dernière modification par hellkinder (26-03-2007 14:17:05)
Hors ligne
Curieux... D'ordinaire çà marche bien.
ldw_child1 est bien déclarée comme datawindowchild je suppose?
Hors ligne
ouaip il est bien déclaré en datawindowchild
Hors ligne
Ta chaîne ls_string est vide ou à NULL?
Hors ligne
elle est juste declaré :
string ls_string
j'ai essayé de la mettre vide et ca ne change rien..
Hors ligne
Je voulais dire: As-tu testé
IF isnull( ls_string ) then messagebox('Bof','NULL') end if
Hors ligne
Ton GetChild retourne quelle valeur?
Hors ligne
Alors en fait je viens de me rendre compte que quand je clique dans ma dddw, l'evenement 'clicked' n'est pas declenché. Dans quel evenement de ma dw dois je mettre ce code ?
Foon, pour repondre a ta question, quand l'evenement est appelé la chaine est vide, pas nulle.
Hors ligne
Comme çà, je dirais : dans l'itemchanged de ta datawindow.
Hors ligne
hum....je doute sur l'event itemchanged...
En fait, j'ai besoin de recuperer l'element cliqué dans la dddw, car cette dddw est de type treeview ("ils sont partout!").
donc quand je clique sur ma dddw sans selectionné une ligne de detail dans mon treeview, l'event itemchanged a peu de chance d'etre appelé. M'enfin on sais jamais... je teste...
Dernière modification par hellkinder (26-03-2007 15:07:11)
Hors ligne
Bon alors c'est très bizarre.
Quand je met le bout de code du debut dans l'itemchanged, voila ce qui se passe.
Lorsque je clique sur le champs de la dw, ls_string est vide. jusqu'ici tout va bien. Puis je clique a l'interieur de mon treeview, apparemment il me detecte bien le bon objet mais il me selectionne automatiquement le premier enregistrement quelquesoit l'endroit ou je clique.
Du coup quand je reclique dans ma dddw il ne passe plus dans l'itemchanged.
Hors ligne
pourquoi tu dois recuperer l'objet de la dddw selectionné ?
il y a pas un autre moyen ?
Hors ligne
je dois le faire pour la raison suivante :
Je veux m'occuper de la gestion des level de ma dddw treeview comme l'expand d'un seul level a la fois, un collapse automatique ou un expand du level lors du clic sur un nom de level et non pas exactement sur le '+' de l'arborescence etc..
Bref j'ai déja fait tout ce code dans une datawindow de type treeview mais dans une dddw...car la seule chose qui me manque pouvoir recuperer l'objet sur lequel je clic dans ma dddw.. et ce plusieurs fois d'affilé..
je sais pas si c'est tres clair, mais j'ai déjà tout fait dans le cas d'une datawindow et ca marche super bien : en 15 lignes de code, je gere tout un treeview...
Hors ligne
hellkinder a écrit:
Bon alors c'est très bizarre.
Quand je met le bout de code du debut dans l'itemchanged, voila ce qui se passe.
Lorsque je clique sur le champs de la dw, ls_string est vide. jusqu'ici tout va bien. Puis je clique a l'interieur de mon treeview, apparemment il me detecte bien le bon objet mais il me selectionne automatiquement le premier enregistrement quelquesoit l'endroit ou je clique.
Du coup quand je reclique dans ma dddw il ne passe plus dans l'itemchanged.
Tu as essayé de poster ton script (en le mettant dans un événement que tu appelles en postevent depuis l'itemchanged)?
Le seul problème, c'est que je n'ai que PB9, et les datawindows treeview, c'est dans la 10.5
Hors ligne
ben je sais pas si c'est genant que ca soit une dw treeview.
le probleme c'est qu'en fait, des que je clique sur ma dddw, il me declenche l'evenement itemchanged et me selectionne la valeur du premier row de ma dddw.
Pour ceux qui ne connaisse pas les dw treeview, imaginez que vous cliquez sur votre 5 eme enregistrement de votre dddw. et que la valeur retenu dans votre champs de dw est le premier enregistrement...
Outre le fait que ca chatouille les nerfs, il faudrait que mon itemchanged soit stoppé. C'est a dire que je lui fais un getobjectatpointer (qui fonctionne la 1ere fois) et si il me selectionne le 1er enregistrement alors qu'il devrait pas, je lui dis de pas me changer la valeur et laisser ma dddw ouverte... suis-je en plein delire?
y'a t il un moyen d'empecher PB de selectionner cette foutue premiere ligne quand je clique n'importe où sur ma dddw?!
Ideas?
PS : Merci a ce qui m'aide (et qui ont mm pas PB10.5), j'apprecie
Dernière modification par hellkinder (26-03-2007 16:32:52)
Hors ligne
Bonjour Hellkinder,
De retour au boulot!
Bon, alors,si tu veux empêcher la sélection de la ligne,je pense
qu'il faut peut-être coder un "RETURN 1" dans ton événement d'itemchanged:
Cà empêche le focus d'être modifié.
Maintenant, je ne sais pas si ça peut t'aider, mais bon...
Dernière modification par foon (27-03-2007 07:33:12)
Hors ligne
je teste on va voir...
Hors ligne
Lorsque je fais un return 1 dans l'itemchanged il m'affiche le validationmessage associé au champs modifié... c'est vraiment le bordel..
Hors ligne
Autant pour moi: Il faut aussi modifier l'événement "Itemerror" en mettant "RETURN 1"
dedant, mais ça risque de te poser problème si tu veux l'utiliser pour faire des contrôles de validation en direct sur ta datawindow et que tu souhaites afficher le validatiomessage dans ce cas.
Hors ligne
exactement...
Donc ca va etre chaud de s'orienter sur cette solution..
Vraiment ca me pose plein de probleme.. Alors j'essaie de me recentrer sur le sujet, ca a pas l'air tres compliqué comme ca :
Empecher la selection du 1er row d'une dropdowndatawindow quand on clique ailleurs dans cette dddw.
Evidemment j'ai vérifié qu'aucun code derriere ne me remplissait ce champs.
Il se trouve que dans le paramètre 'data' de mon event 'Itemchanged', se trouve tout simplement la valeur du 1er champs. Or l'itemchanged est appelé lors d'un clic n'importe où dans ma dddw.
Donc le problème semble bien venir de là...maintenant comment le résoudre...
Hors ligne
Bon, ben, désolé Hellkinder, mais pour l'instant je ne vois pas (le plus embêtant, c'est que les dddw n'ont jamais d'événements propre).
Peut-être que d'autres PBdonfeurs seront plus aptes à te répondre.
(Pffff Pick ouic, même pas mal )
Sinon, je devrais migrer en 10.5 à la fin de cette semaine. Je pourrais peut-être
tester autre chose à ce moment là (Enfin... si la migration s'est bien passée )
Dernière modification par foon (27-03-2007 13:37:52)
Hors ligne
je n'ai pas trop le temps de regarder ton probleme...il suffit de tester cela sur une dddw...qui affiche plusieurs colonnes... la gestion devrait etre du meme accabit non ?
si cela repointe vers la 1ere ligne, c'est qu'il y a un code de reselection ?
estce que cela le fait pour d'autres dddw du meme type ? as-tu regardé de ce coté la ?
Hors ligne
Ben merci foon.. effectivement si la migration se passe bien, peut être pourras tu m'aider pour ce problème que je vais laisser un peu en suspens, mais que je reprendrai à chaque fois que quelqu'un aura une idée.
Sinon pick, le problème n'est identifié qu'avec cette foutue dddw.
J'ai diagnostiqué un élément de plus qui peut, ma foi, jouer un rôle important dans ce problème. Je vous expliqué que c'etait une dddw de type Treeview et qu'il me selectionne le 1er row quelque soit l'endroit où je clique qui n'est pas un row. Je viens de m'apercevoir que ce curieux phénomène n'a pas lieu si avant de cliquer n'importe où j'ouvre un node de ma treeview. Si je deplois une categorie avec le +, il m'affiche alors les sous catégorie. Je peux alors cliqué n'importe où et la il me ferme la dddw mais ne me selectionne pas le 1er row.
Voilà, certains diraient que c'est complètement fou, d'autres que c'est gueudin...moi je dis que ca me casse les parce que je suis un nerveux
Merci de votre aide en tout cas...et je reste preneur de chacune des idées que vous pourriez avoir.
Hors ligne