Un controllo molto interessante di ASP.NET 2.0 è la TreeView, che permette di creare interessanti interfacce di navigazione.
Il controllo TreeView può anche essere legato a sorgenti di dati gerarchiche e a file XML, riducendo quasi a zero la quantità di codice necessaria per mostrare i dati nelle nostre pagine web.
Questo script nasce dalla necessità di popolare in maniera semplice un TreeView usando una serie di tabelle, ognuna delle quali contiene i nodi che saranno ad un certo livello di profondità nella nostra gerarchia. Ognuna di queste tabelle conterrà un campo Id (la chiave della tabella), un campo Descrizione (il testo che verrà mostrato) e una chiave esterna che indicherà l'Id del nodo padre (contenuto nella tabella "precedente").
Per cominciare creiamo un array di stringhe che contenga le query per recuperare i dati dal Database:
private string[] ArrQry =
{
"SELECT * FROM Presidi WHERE 1>",
"SELECT Id, Descrizione FROM Piani WHERE IdPresidio=",
"SELECT Id, Descrizione FROM Stanze WHERE IdPiano=",
"SELECT Id, Descrizione FROM Postazioni WHERE IdStanza="
};Il caricamento dei dati nel TreeView avviene una sola volta al caricamento della pagina:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeNode myNode = new TreeNode("ACMEInformatica", "0");
tvRete.Nodes.Add(myNode);
Popola(myNode, 0);
myConnection.Close();
}
}Procediamo creando un nodo principale di livello 0, chiamato "ACMEInformatica", e dopo averlo aggiunto alla TreeView eseguiamo la funzione ricorsiva "Popola", che si preoccupa di recuperare i dati dal database e di aggiungere i nodi corretti ad un nodo determinato:
private void Popola(TreeNode aNode, int Livello)
{
if (Livello < ArrQry.Length)
{
myAdapt = new OleDbDataAdapter(ArrQry[Livello] + aNode.Value, myConnection);
DataSet myDS = new DataSet();
myAdapt.Fill(myDS);
foreach (DataRow aRow in myDS.Tables[0].Rows)
{
TreeNode myNode = new TreeNode(aRow["Descrizione"].ToString(), aRow["Id"].ToString());
aNode.ChildNodes.Add(myNode);
Popola(myNode, ++Livello);
}
}
}La tabella Presidi non ha una chiave esterna, essendo la prima ad essere recuperata, e abbiamo usato un trucco molto semplice, inserendo un filtro fittizio.
La forza di questa soluzione è che permette anche di aggiungere semplicemente dei livelli all'albero agendo unicamente sull'array delle query, per esempio per poter gestire anche il materiale di ogni postazione basta inserire come ultimo elemento dell'array questa query, senza dover modificare nessuna riga di codice:
SELECT Id, Marca+' '+Modello AS Descrizione FROM Materiale WHERE IdPostazione=E' anche possibile caricare i dati on demand, quando l'utente espande un particolare nodo, come in questo esempio:
http://www.asp.net/QuickStart/aspnet/doc/data/hierarchy.aspx#database
- ASP.NET 3.5: global.asax vs managed modules
- #912 - Composite Custom Control per ASP.NET
- #945 - Verificare l'accesso ai file mediante l'UrlAuthorizationModule di ASP.NET
- #930 - Propagare un evento al controllo padre nei Custom Control
- #909 - Un custom control per recuperare da web.config il formato dell'URL di ImageField
- Membership e Profile API con ASP.NET AJAX
- WPF: dal DataBinding ai Template - Seconda parte
- un visualizzatore di eccezioni parte 1: helper
- Realizzare applicazioni ASP.NET sicure - Seconda parte
- #916 - Utilizzare il ControlState di ASP.NET 2.0
- #902 - Un custom control per visualizzare le informazioni di Profile API
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!

Salve,ho provato lo script è sono riuscito a visualizzare il menù..non sono pero riuscito ad assegnare un url ad ogni nodo come posso fare???
Continua »»» | Rispondi »»»