Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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 :
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
Solution appliquée (mais bon, on reste dans du parcours) :
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
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