Treeview popolare con icone

giovedì 27 agosto 2015 - 15.23
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio 2010  |  MySQL 5.5

Mau67 Profilo | Expert

Buon pomeriggio al forum,
chiedo aiuto sul completamento del codice che tra breve vi posterò, in pratica dovrei creare un albero per la lettura dei database,tabelle,stored procedure ecc.
vorrei fare in questo modo:

1) Nel nodo padre Visualizzo il nome del DATABASE ma vorrei inserire un icona presa dall'ImageList
2) dovrei inserire un nodo Figlio chiamato TABELLA e li elencare i nomi delle tabelle corrispondenti al DATABASE anche qui devo inserire l'icona nel nodo TABELLA
3) dovrei inserire un nodo Figlio chiamato STORED PROCEDURE e li elencare i nomi delle Stored Procedure corrispondenti al DATABASE anche qui devo inserire l'icona nel nodo TABELLA

vi allego il codice che ho scritto sperando in un aiuto per arrivare al risultato

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

grazie in anticipo
Mau67

AntCiar Profilo | Expert

Ciao.

- Per prima cosa ti devi creare la ImageList e popolarla con le icone che ti servono (penso che l'hai già fatto)
- associa l'ImageList creata alla proprietà ImageList della treeview

- ricordati per ogni icona l'indice a base 0 che occupa nella imagelist.

poi usa questo codice (ho messo solo la parte del for each) sostituendo al posto dei puntini l'indice dell'icona da visualizzare

For Each Database As DataRow In DS.Tables("Database").Rows dim nodoDB as new Treenode() nodoDB.text = Database("TABLE_SCHEMA").ToString() nodoDB.imageindex = .... Dim nodoGRP as new TreeNode() nodoGRP.Text = "Tabelle" nodoGRP.imageindex = .... For Each Tabelle As DataRow In DS.Tables("Tabelle").Rows If Tabelle("TABLE_SCHEMA") = Database("TABLE_SCHEMA") Then dim ntb as new treenode() ntb.text = Tabelle("TABLE_NAME") ntb.imageindex = ... nodoGRP.nodes.add(ntb) End If Next nodoDB.nodes.add(nodoGRP) nodoGRP = new TreeNode() nodoGRP.Text = "Routine" nodoGRP.imageindex = .... For Each Routine As DataRow In DS.Tables("Routine").Rows If Routine("ROUTINE_SCHEMA") = Database("TABLE_SCHEMA") Then dim nrt as new treenode() nrt.text = Routine("ROUTINE_NAME").tostring() nrt.imageindex = .... nodoGRP.nodes.add(nrt) End If Next nodoDB.nodes.add(nodoGRP) TreeView1.nodes.add(nodoDB) Next
Cristian Barca

Mau67 Profilo | Expert

Cristian sempre preciso grazie,
una domanda al volo se devo selezionare i nodi per eventuali ricerche o caricare dati ecc?

Come faccio grazie
Mau67

AntCiar Profilo | Expert

La treeview possiede di suo un sistema di ricerca.

per poterlo sfruttare devi 'marchiare' i nodi. Per farlo devi valorizzare la proprietà Name dell'oggetto TreeNode.

ad esempio nel codice che ti ho mandato quando scrivi il nodo del database, dopo nodoDB.Text = .... mettici nodoDB.Name = ..... e ci metti per prova lo stesso nome.

fai la stessa cosa anche per le tabelle e le routine (nei cicli)


Poi quando devi fare una ricerca richiama il metodo Find:

dim result as treenode() = treeview1.nodes.Find("parola da cercare", true)
if result.lenght > 0 then

treeview1.focusednode = result(0)
result(0).ensurevisible()

else
msgbox "nessun nodo trovato"
end if


il metodo Find restituisce un array di nodi (ovviamente se trova qualcosa corrispondete al parametro di ricerca )
il codice che ti ho scritto ti permette di selezionare e visualizzare il primo nodo trovato.


Cristian Barca

Mau67 Profilo | Expert

Grazie come sempre preciso e puntuale ciao alla prossima
Mau67

Mau67 Profilo | Expert

Ciao Cristian Barca,
scusa ho bisogno di te, visto che mi hai aiutato a scrivere il codice per popolare il treeview ho bisogno di ricavare i nomi dei vari nodi e inserirli in alcune textbox.

Praticamente quando seleziono uno dei nodi padre mi deve restituire il nome che è visualizzato in una textbox,quando seleziono il nodo figlio deve restituirmi il nome visualizzato in un altra textbox,se seleziono solo il nodo figlio deve restituirmi sia il nome del nodo padre nella prima textbox e il nome del nodo figlio nella seconda textbox.

è possibile?

Ti ringrazio anticipatamente stò provando e riprovando ma non riesco a trovare la soluzione.

Mau67

AntCiar Profilo | Expert

Ciao.

Certo che è possibile. Nell'evento afterselect della treeview (mi pare che si chiama così) devi fare:


if e.node.parent is nothing then
//ho selezionato un nodo padre
me.textbox1.text = e.node.text
me.textbox2.text = ""

else

//ho selezionato un nodo figlio
me.textbox1.text = e.node.parent.text //nome del nodo padre
me.textbox2.text = e.node.text //nome del nodo selezionato

end if

Cristian Barca

Mau67 Profilo | Expert

Grazie ciao alla prossima
Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5