Pas de problème (pb), que du PowerBuilder (PB) ^^

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.

#1 19-06-2014 14:40:13

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Recherche dans un treeview par le code du noeud

Bonjour,
tout est dit dans le titre... En PB9, peut-on retrouver le handle d'un noeud par son Data ?

La méthode treeviewname.FindItem ( navigationcode, itemhandle ) permet de trouver un noeud par rapport à son handle, existe-t-il une méthode (autre que parcourir tout le treeview) pour retrouver à partir de la valeur TreeviewItem.Data le handle d'un noeud ?

Le seul code que j'ai trouvé pour le moment est celui-ci :

Code: pb

ll_handle = tv_1.FindItem(RootTreeItem!,0)
Do While ll_handle > 0
    ll_handle = tv_1.FindItem(NextvisibleTreeItem!, ll_handle)
    IF ll_handle < 0 THE EXIT
    tv_1.GetItem(ll_handle,tv_item)
    IF upper(tv_item.Data) = upper(<Code Recherché>) then
        ll_required_handle  = tv_item.itemhandle
        Exit
    END IF
LOOP
return ll_required_handle


PB12 apporte-t-il de nouvelles fonctionnalités au Treeview ?

Hors ligne

 

#2 20-06-2014 07:13:49

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: Recherche dans un treeview par le code du noeud

Solution appliquée (mais bon, on reste dans du parcours) :

Code: pb

public function long find (string value, string context, long handle)
Long ll_node, ll_child, ll_find
TreeviewItem ltvi_item

ll_node = Handle
Do Until ll_node = -1
  tv_1.getItem(ll_node, ltvi_item)

  Choose Case Context
    Case C_LABEL
      If upper(ltvi_item.Label) = upper(Value) Then Return ll_node
    Case C_DATA
      If upper(String(ltvi_item.Data)) = upper(Value) Then Return ll_node
  End Choose
  If ltvi_item.Children Then
    ll_child = tv_1.findItem(ChildTreeItem!, ll_node)
    ll_find = find(Value, Context, ll_child)
  End If
  ll_node = tv_1.FindItem(NextTreeItem!, ll_node)
Loop

Return ll_find
end function


Y aurait-il quelque chose de plus élégant ?

Hors ligne

 

#3 22-06-2014 13:12:26

Yanis  
Modérateur
Lieu: paris
Date d'inscription: 16-06-2010
Messages: 349
Pépites: 665
Banque: 150

Re: Recherche dans un treeview par le code du noeud

Salut,

     Je ne connais pas de fonction permettant de retrouver un item par son data.
     La solution que j'utilise est la suivante.
                 - Comme mes treeview sont chargés à partir d'un datastore, j'ajoute systématiquement une colonne ou je stocke le handle de l'item une fois celui ci insérer dans le treeview.
                 - Celà me permet de faire un find dans le datastore et donc de récupérer le handle de l'item.

Cdt
Yanis

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22