Ipostare un controllo TreeView per dati estrapolati da un database.

domenica 15 febbraio 2009 - 17.20

86Marco Profilo | Expert

Salve, ho costruito una piccola applicazione ASP.NET per gestire dei corsi di una scuola.
Mi servirebbe un controllo, simile al TreeView, che possa rappresentare tutti i titoli dei corsi e se si fa clic sul relativo segno "+" di ogni corso mi espanda la selezione in modo tale da vedere il resto delle informazioni relative a quel corso.

Il tutto (quindi i dati del database) sono etrapolati da un database.
COme fare?
Grazie!!

Jeremy Profilo | Guru

Ciao Marco.
Puoi popolare delle datatable con i dati delle tabelle e, successivamente prenderne le informazioni per costruire il treeview.

Facci sapere..
Ciao

86Marco Profilo | Expert

CIao e grazie per avermi risposto innanzitutto.
Il problema è proprio questo nel senso che ho gia creato un datatable ma non so come popolare il treewiew. :(

Jeremy Profilo | Guru

Cominciamo con la prima cosa.
Prelevi il titolo del corso dalla datatable e scrivi:

For Each row As DataRow In dt.Rows TreeView1.Nodes.Add(row.Item("Id").ToString, row.Item("Titolo").ToString) Next

Comincia a vedere cosa ottieni con questo...il resto dovresti riuscirci da solo, altrimenti ... fatti sentire.
Ciao

86Marco Profilo | Expert

Ciao:
ho creato il dataset e il datatable e successivamente inserisco il treeview tramite il foreach che mi hai suggerito ma ricevo il seguente messaggio

Errore di compilazione
Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: BC30311: Impossibile convertire il valore di tipo 'String' in 'System.Web.UI.WebControls.TreeNode'.

Errore nel codice sorgente:



Riga 35:
Riga 36: For Each row As System.Data.DataRow In dt1.Rows
Riga 37: TreeView1.Nodes.Add(row.Item("ID").ToString)
Riga 38: Next
Riga 39:


Jeremy Profilo | Guru

Si è vero ... perchè il treeview di ASP.NET è diverso da quello delle WindowsForms.
Pretende....un oggetto treenode da aggiungere alla collection Nodes....quindi:

For Each row As DataRow In dt.Rows TreeView1.Nodes.Add(new treenode(row.Item("Titolo").ToString, row.Item("Id").ToString)) Next

Facci sapere....
Ciao

86Marco Profilo | Expert

Perfetto, in questo modo riesco a recuperare tutti i titoli dei corsi.
Ma come fare per fare in modo che ogniu corso possa avere un subnodo che una volta espanso mi tiri fuori dal database le altre informazini del corso??
Grazie mille!

Jeremy Profilo | Guru

Ciao Marco.
Basta aggiungere un Nodo al Nodo appena creato.

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


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


Facci sapere...
Ciao

86Marco Profilo | Expert

Ciao ho provato con entrambi i codici da te suggeriti ma mi da errore.... :)

Jeremy Profilo | Guru

Ciao Marco
Eh...che tipo di errore...indovino indovinello?

Facci sapere...
Ciao

86Marco Profilo | Expert

No scusami avavo cpiato male :)
Perfetto mille grazie.

A sto punto due ultimissime cose.

1) per impostazione predefinita tutte le voci di un treeview sono utilizzate come collegamenti, nel senso che ci passo su con il mouse e vine fuori "la manina", come fare per disabilitare questa funzionalità?

2) Dovrei comunque avere un "clicca qui" (che inserisco come testo) che effettivamente mi deve reindirizzare alla scheda corso che utilizzo nella mia applicazione tramite una query string. Come mi consigli di fare?
MIlle e ancora mille grazie :)

Jeremy Profilo | Guru

Ciao Marco..
Ho provato anche io ..... effettivamente sono stato un pò superficiale nelle indicazioni ....... comunque il codice corretto dovrebbe essere:

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

Facci sapere...
Ciao

86Marco Profilo | Expert

esatto ho sostituito il childnodes... ti ho postato un altra risposta leggi su e ancora grazie.

Jeremy Profilo | Guru

>1) per impostazione predefinita tutte le voci di un treeview
>sono utilizzate come collegamenti, nel senso che ci passo su
>con il mouse e vine fuori "la manina", come fare per disabilitare
>questa funzionalità?
Per questo non saprei proprio...credo che non ci sia niente da fare.


>2) Dovrei comunque avere un "clicca qui" (che inserisco come
>testo) che effettivamente mi deve reindirizzare alla scheda corso
>che utilizzo nella mia applicazione tramite una query string.
>Come mi consigli di fare?
Per questo invece prova a vedere la proprietà treeview1.Nodes(0).NavigateUrl se può fare al caso tuo....

Facci sapere...
Ciao

86Marco Profilo | Expert

Provo questa sintassi ma mi viene restituito un errore (che ti posto + sotto):

Con la sintassi da te suggerita mi viene fuori l'errore:
Messaggio di errore del compilatore: BC30545: L'accesso alla proprietà deve assegnare un valore alla proprietà o utilizzare quello corrente.

Jeremy Profilo | Guru

Ho provato ad assegnare a quella proprietà questo valore:

TreeView1.Nodes(0).NavigateUrl = "http:\\www.dotnethell.it"

e,cliccando sul primo Nodo della treeview, si apre la Home del sito....a cosa ti riferisci con quell'errore del compilatore?

Facci sapere...
Ciao

86Marco Profilo | Expert

Perfetto ... avevo anche qui sbagliato a copiare :) mille grazie :)

paoval72 Profilo | Senior Member

Ciao, scusate se mi infilo nel thread.
86Marco, che fine dovrebbe fare la manina? la vuoi cambiare, disabilitare?

Buona giornata a tutti,
PV

86Marco Profilo | Expert

Ei ciao, bhe si... dovrei completamente disabilitarla! :)
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5