Newsgroup: it.comp.lang.visual-basic
Titolo: [Consiglio] Procedura Ricorsiva

Secondo voi, dovendo popolare una treeview con una struttura ad albero (e
che scoperta direte!), con i dati presi da una tabella dove i record sono
legati l'uno con l'altro da un campo 'parent' che fa riferimento all'id del
record "padre", e posto che non si ha un numero di livelli massimo, č tanto
brutto utilizzare una funzione ricorsiva? E se sě, cosa consigliate?
grazie
ciaociao

 typed:

Ma tu hai un'unica tabella e non hai un campo che ti indica il livello?

 brutto utilizzare una funzione ricorsiva? E se sì, cosa consigliate?
La costruzione di un albero è un caso classico di ricorsività.
Si dice che qualsiasi funzione ricorsiva sia trasformabile in 
non-ricorsiva mediante l'uso delle pile (non le duracell, le pile di 
dati) ma non ho idea di come funzioni questa teoria.
Ciao


Non so dirti se č bello o brutto, ma io trovo funzionale una funzione
(appunto) ricorsiva.
Io, per popolare un menu ad albero in ASP, basandomi su una tabella
strutturata cosě come la descrivi tu, ho creato una funzione ricorsiva che
viene richiamata per ogni elemento che č parent di altri elementi e che
quindi č un nodo.
-- 
Esteban
www.seber.it
Questo post č stato scritto con bit riciclati.

 se sì, cosa consigliate?
http://www.sitepoint.com/print/1105
prova a vedere.. a me è stato estremamente utile
HTH
-- 
Stefano Zamboni - 
zam...@freemail.it
Legge di Biondi:
Se il tuo progetto non funziona, controlla la parte che non ti pareva
importante.

 dati) ma non ho idea di come funzioni questa teoria.
Vettore LIFO (Last In, First Out), come lo stack di Gosub/Return

 
A che gli serve?
Quando il parent è nullo ha finito.
Ciao

 
Sě, so cos'č una pila, non so come gestire la storia della 
trasformazione. :)
Ciao

[Marg = 
circa...@inwind.it
 in
c5gphq$1fhhi$
1...@ID-193795.news.uni-berlin.de
] ha scritto:

Detto cosě, parrebbe che ogni record di tabella č completamente descritto,
nel senso che sa a chi appartiene (parent). Ipotizzando che il parent sia
univocamente individuabile, viste le caratteristiche (key) del TV, non mi
sento di sconsigliarti la ricorsione, ma io mi limiterei a scorrere i
records della tabella. Mi sembra piů "pulito".

 trasformazione. :)
Se ricorsione vuol dire, in soldoni, il gatto che rincorre la sua coda, la
trasformazione è una coppia di gatti: il primo comanda, il secondo esegue e
nessuno si fa male.
Traduzione: il vettore in ogni suo elemento "sa" dove si trova (livello),
magari "consultando" i livelli a monte. Un "gestore" compone e gestisce i
vari livelli sino ad esaurimento, uno alla volta.
L'esplosione di una distinta base multilivello (senza limiti) ne è un
classico esempio. Qualcuno, qui, fa delle SQL interne, interne e ancora
interne. Io preferisco scandagliare a oltranza il primo ramo, il suo
sottoramo, etc.

 
Veramente interessante il secondo metodo, da colpo di genio!
grazie
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!


esatto
ciaociao

 prova a vedere.. a me è stato estremamente utile
grazie, stasera ci do una bella lettura
ciaociao

 sembra piů "pulito".
cioč mi apro un bel recordset e vado ad appendere gli elementi ai nodi man
mano che lo scorro?
Bisogna vedere a questo punto se č piů veloce fare ricerche sulla tabella
indicizzata o direttamente nella treeview
ciaociao


infatti č la soluzione che avevo in mente :)
ciaociao

 tabella indicizzata o direttamente nella treeview
Avevo inteso che tu volessi comporre integralmente un TV, in tutti i suoi
rami e livelli.
Che c'entra la ricerca?


Sě scusa, č stato un colpo di Dolcetto d'Alba..... :-P
Credo che butterň giů entrambe gli algoritmi e poi vedo il piů prestante.
Grazie
ciaociao

 maxx
ciaociao


mmm....non mi č ben chiaro sto secondo metodo..... :-?
mi sa che lo devo rileggere con piů calma!
ciaociao

 
Il colpo di genio non viene cosi' su 2 piedi, ci si deve sedere sotto un 
albero ed aspettare che la mela cada ...
;-)


 maxx
Ho subito un trauma una volta: mi sono seduto sotto l'albero ad aspettare
ma.......era una palma da cocco!!
Le conseguenze le potete vedere.... :-P
ciaociao

 
Beato te che puoi uscire dall'ufficio e sederti sotto una palma da cocco 


 infatti è la soluzione che avevo in mente :)
confermo ! Ho usato anche io questo metodo con un file di testo (creato da
programma aggiungendo un ramo nel TV)
Semplice file di testo ( o cvs) :
1) scansiono il file e leggo tutti i "rami di primo livello" che hanno un
campo "Relative" = "" o il povero vbnullstring e popolo la Tv, a questo
punto e' tutto finito.
2) click su nodo, blocco il refresh, collasso tutti i rami tranne quello del
click, leggo la "Relative" dalla TV e carico i rametti figli dal file di
testo che hanno quel relative e riabilito il refresh.
in questo modo il TV potrebbe avere anche miglioni di rami foglie e mele,
chi se ne frega, carichero' Solo lo stretto necessario. Diciamo che e' lo
stesso discorso delle liste kilometriche: che senso ha caricare tutti gli
item quando a video se ne vedono una 20ina si e no ?
Per adesso non ho mai avuto bisogno di "modificare" questo tipo di gestione
dei TV, credo sia il metodo migliore sia a livello di gestione che a livello
di prestazioni di caricamento. !
PS: (Appunti sulla ricorsivita')
Il codice sul click del nodo e' richiamabile anche da codice ed effettua
un'operazione ricorsiva in questo modo :
<pseudo code>
|--------------------------------------|
call carica  TV.nodo
|--------------------------------------|
sub caricanodo :
    if scansioneTV(TV.Nodo.Key)  then
        ' Se il ramo parent e' Gia' caricato
        ' allora accoda i rami twChild
        < scansiona file e accoda i rami>
    else
        ' altrimenti lancia la scansione ricorsiva sul nodo parent
        caricanodo(TV.Nodo.parent)
   endif
end sub
|--------------------------------------|
in questo modo da codice posso richiamare anche l'ultimo dei rametti e creo
TUTTA la struttura di nodi che punta ad esso
-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 refresh.
Sembra la sceneggiatura di uno di quei film disastrosi, in TV ovviamente...

 ovviamente...
U?
