Discussione chiusa
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Determinazione del "Livello" di nodo in una TreeView

  1. #1
    misonsan non è in linea Scolaretto
    Post
    148

    Angry Determinazione del "Livello" di nodo in una TreeView

    Grazie anticipatamente a Tutti.

    HO memorizzato in una Treview la struttura di un magazzino.
    Nel nodo radice ho inserito l'azienda e piu sotto a scalare il magazzino come secondo nodo, al suo interno gli scaffali e alll'interno le categorie merceologiche , al cui interno i prodotti.
    Spero che la descrizione sia stata sufficientemente chiara.
    In una successiva fase di gestione della form, devo poter aprire o chiudere la struttura in funzione del nodo da elaborare.
    Mi spiego meglio.
    Devo dare la possibilità di poter espandere la struttura solo per i nodi 1 (Radice), 2(Magazzini) e 3 (categorie).
    la rimanente parte deve rimanere compressa.

    per far questo, in una scansione while ..... wend dove leggo tutti i nodi, devo poter intercennatre il singolo nodo per poter impostare la proprietà
    .expanded in True o false per aprire o chiudere la visualizzazione.
    Sto impazzendo perchè non ho trovato proprietà che mi individuino il valore del singolo nodo e quindi permettermi di impostare su .expanded il true o false.
    Qualcuno sa darmi una dritta ?
    grazie

    Moreno

  2. #2
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,148
    Blogs
    3
    ogni nodo possiede una proprietà Tag. Potresti impostare questa proprietà con un codice a te noto (diverso per radice, magazzino o altro) che ti consentirebbe di identificarlo quando effettui la scansione col while, agendo di conseguenza.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  3. #3
    misonsan non è in linea Scolaretto
    Post
    148
    grazie TheTruster

    mi dai conferma che non esiste quindi una proprietà che in maniera diretta mi dia il livello del nodo.

    il tuo consiglio

    ogni nodo possiede una proprietà Tag. Potresti impostare questa proprietà con un codice a te noto (diverso per radice, magazzino o altro) che ti consentirebbe di identificarlo quando effettui la scansione col while, agendo di conseguenza.
    Mi sembra efficace; dovresti aiutarmi a impostare la proprietà tag sul nodo.

    Il codice che uso è il seguente:
    Set rs = conn.Execute(Strsql)
    While (Not rs.EOF)
    Number_Node = rs.Fields("NODO")
    Primary_Node = rs.Fields("CODICE_PADRE")
    Key_Node = rs.Fields("CODICE")
    Select Case rs.Fields("CODICE")
    Case "UTE0"
    Prog = Prog + 1
    Key_Node = Key_Node & Prog ' per rendere univoca la chiave del nodo
    Case Else
    End Select

    Description_Node = rs.Fields("DESCRIZIONE")
    Select Case Number_Node
    Case 1
    TV.Nodes.Add , , Primary_Node, Description_Node, Number_Node
    Case Else
    TV.Nodes.Add Primary_Node, tvwChild, Key_Node, Description_Node, Number_Node
    End Select
    rs.MoveNext
    Wend
    nei parametri di TV.Nodes.Add non ci sono parametri che puntino a .tag
    Grazie

    Moreno

  4. #4
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,148
    Blogs
    3
    ovviamente non puoi valorizzare la proprietà Tag attraverso la creazione del nodo tramite Add... questo va fatto in un secondo momento:

    codice:
    Dim tvItm As Node
    Set tvItm = TV.Nodes.Add(Primary_Node, tvwChild, Key_Node, Description_Node, Number_Node)
    tvItm.Tag = "ROOT"
    Come vedi, passando attraverso l'assegnazione del nodo appena creato ad una variabile oggetto temporanea, riesci a gestire tutte le sue proprietà, Tag compresa.
    Nel codice sopra l'ho valorizzata con ROOT per indicare che si tratta di un nodo radice, ma la stessa cosa vale per i nodi MAG (magazzini) o CAT (categorie).

    Comunque, la stessa cosa, a meno che non ti serva per altro, la puoi fare con la Key che come sai deve essere univoca, ma nulla ti vieta di inserirvi un prefisso (R per Radice, M per magazzini, C per categorie, etc...)

    Puoi controllare successivamente con una InStr di che nodo si tratta.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  5. #5
    darionardella non è in linea Novello
    Post
    3

    Red face TreeView e livello del nodo

    Io utilizzo un metodo elementare ma efficace:

    1- Leggo il percorso completo del nodo (.fullpath)
    2- Trasformo il percorso in una matrice utilizzando la funzione split(percorso,separatore)
    il separatore di default è "\"
    3- Conto gli elementi della matrice con ubound(matrice)
    4- ll numero ottenuto rappresenta il livello del nodo!
    Attenzione: normalmente la funzione Split restituisce una matrice a base 0,
    quindi bisogna aggiungere +1 per avere il livello in base 1.
    Esempio

    Function TreeGetNodeLevel (byval oNode as mscctrllib.node) as long
    dim iLevel as long
    iLevel=0
    if oNode is nothing then goto esci
    percorso=oNode.fullpath
    matrice=Split(percorso,"\"):iLevel=Ubound(matrice) +1
    esci:
    TreeGetNodeLevel=iLevel
    End Function

    Spero di essere stato utile
    Dario

  6. #6
    darionardella non è in linea Novello
    Post
    3
    rettifico:
    function TreeGetNodeLevel(byval oNode as MSComctlLib.Node)

    scusate
    Dario

  7. #7
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    14,303
    Blogs
    5
    Questo è un thread del 2012!!

    Non si risponde a thread così vecchi, non ha senso.

    Thread chiuso
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

Discussione chiusa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi