Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut à tous,
J'ai une DW treeview associée à des DW détail.
Via une option de menu, je peux insérer une ligne détail mais à la condition qu'au moins le treeview ai été
ouvert jusqu'à un certain niveau. Et c'est là que je coince ...
Quelqu'un sait-il comment récupérer le dernier niveau séléctionné dans une DW de type treeview ?
Il ya bien la fonction IsExpanded(row,grouplevel) mais elle exige un N° de ligne en paramètre, N° que je ne connais pas
merci d'avance
Hors ligne
Ok avec ce qui suit tu devrais pouvoir réussir pas mal de choses. Voilà toutes les astuces :
sur event clicked de la datawindow type treeview
Declaration
string ls_string string ls_check int i long ll_clicked_row,ll_level,ll_level_bis
récupere l'objet cliqué.. quelquesoit ce que tu veux faire de ce qu'il y a en dessous tu dois faire ca :
ls_string = this.GetObjectAtPointer()
recupération du premier row correspondant a l'entete cliqué, quelquesoit son niveau
ll_clicked_row = long(mid(ls_string, pos(ls_string, "~t") + 1, len(ls_string)))
recupération du numero de niveau sur lequel on a cliqué
ls_check = Left(ls_string, Pos(ls_string, "~t") - 1) for i=1 to 2 ls_check = right(ls_check,len(ls_check) - len(right(ls_check,Pos(ls_check, "."))) ) next ll_level = long(ls_check)
Le bout de code ci_dessous te permet de refermer tout l'arbre sauf la branche que tu parcours.
Admettons que tu sois en train de parcourir les voitures, dans voitures tu regardes les marques....puis soudain du clique sur la categorie moto, dans ce cas la branche voiture et marque se ferment et la branche moto s'ouvre te laissant parcourir les marques de moto (je sais pas si c'est clair..mais bon)
if this.isexpanded( ll_clicked_row, ll_level) then this.collapse(ll_clicked_row, ll_level) else if ll_level > 0 then this.Collapseall() for ll_level_bis = 1 to ll_level this.expand(ll_clicked_row, ll_level_bis) next else ll_level = 4 ll_clicked_row = row end if end if
[edit] [ code=pb ]
Dernière modification par hellkinder (30-03-2007 13:41:08)
Hors ligne
Bonjour,
Pour récupérer la ligne courante, je suppose que la méthode GetRow marche aussi sur ce type de datawindow.
Sinon, dans l'aide PB 10.5, je viens de trouver ça:
Expanded Event
Description
Occurs when a node in a TreeView DataWindow has expanded.
PowerBuilder event information
Event ID: pbm_dwnexpanded
Expanded is not a standard PowerBuilder event. To write a script for this event, you must first define a user-defined event for the event ID pbm_dwnexpanded.
Argument Description
row Long by value. The number of the first row in the group that has been expanded.
grouplevel Long by value. The TreeView level of the group that has been expanded.
Return value
There are no return codes.
Usage
A TreeView node expands when the user clicks the State icon (+) in the TreeView DataWindow or uses any of the Expand methods.
The Expanding event occurs before the Expanded event.
Dès lors, je suppose qu'il te sera facile de stocker le row et le grouplevel dans des variables d'instance lors de l'exécution de cet événement.
Mais bon, c'est à tester...
Dernière modification par foon (30-03-2007 13:54:41)
Hors ligne
Merci Hellkinder,
Je vais voir ce que je peux faire avec cela, je crois quand même que ça va coincer car l'objet cliqué à ce moment-là est
le menu et non plus la DW.
En fin je vais voir çà de plus près ...
Hors ligne
Foon,
peut-être que passer par un event PB et stocker les valeurs dans des variables d'instance est une piste intéressante ...
je vais regarder cela
Merci
Hors ligne
Tiens nous au courrant quand tu as la solution.
Hors ligne
Voici ce que j'ai adpoté comme solution :
2 variables d'instance : il_row et il_level
Ces variable sont mises à jour dans 3 events :
1) le clicked event de la DW Treeview via le instructions
ls_dw_band = this.GetBandAtPointer() my_band = wf_parse_bandinfo (ls_dw_band) // parse l'info dans un structure : row + level (ex: 'Detail' ou 'tree.level.1') IF my_band.band = 'detail' THEN ll_level = 0 ELSE ll_level = long(right(my_band.band,1)) END IF il_row = my_band.row
2) user event sur la DW Treeview : ue_expand(row,grouplevel) qui pointe vers l'event ID pbm_dwexpanding
il_row = row
il_level = grouplevel
RETURN 0
3) user event sur la DW Treeview : ue_collapse(row,grouplevel) qui pointe vers l'event ID pbm_dwcollapsing
code identique au 2)
Ainsi où que clique l'utilisateur, je capte la ligne et le niveau
Merci à Foon et aux autres
[edit] [ code=pb ]
Dernière modification par elbrizzio (03-04-2007 06:56:03)
Hors ligne