ASP.Net  »  Guide  »  Guida ASP.NET 2.0 

Databinding da codice per il TreeView



Il popolamento del TreeView può essere realizzato o in modo statico impostando il "binding" al Site Map o in modo dinamico mediante del codice scritto ad hoc ma sempre lato server.

Questa scelta può essere fatta se si ha a che fare con un sito che cambia frequentemente oppure se si vuole realizzare un File Browser per l'applicazione. Realizziamo per esempio un File Browser per la nostra applicazione.

Con il VWD apriamo un nuovo progetto. Nella Default.aspx, trasciniamo un TreeView e, nella sua finestra delle Attività di TreeView, spuntiamo "Mostra Righe".

Personalizziamo le icone del nostro albero di esplorazione. In "Esplora Soluzioni", aggiungiamo una cartella "Immagini" e poniamo al suo interno le icone per i documenti e le cartelle aperte e chiuse:

Icona Cartella aperta

Icona cartella aperta

Icona cartella chiusa

Icona cartella chiusa

Icona documento

Icona documento

Ritorniamo alla finestra delle Attività di TreeView e selezioniamo "Personalizza immagini linea". Appare la maschera del generatore di immagini linea

Figura 1. Generatore immagini linea per TreeView

Generatore immagini linea per TreeView

Impostiamo come CollapseImage la cartellachiusa.gif e come ExpandImage la cartellaaperta.gif:

Figura 2. Impostare icone personalizzate

Impostare icone personalizzate

Clicchiamo su "OK". Se il VWD ci chiede se vogliamo creare la cartella "TreeLineImages" che al momento non esiste, rispondiamo "sì". Questa cartella contiene una insieme di immagini che servono al TreeView nella sua corrente impostazione.

Andiamo adesso nella pagina del codice della Default.aspx (la Default.aspx.cs), includiamo il namespace System.IO ed implementiamo un metodo ricorsivo per ottenere le cartelle e le sottocartelle del sito:

Listato 26. Creare l'albero delle cartelle

public void ottieniSottoCartelle(string path, TreeNode node)
{
 string[] cartelle = Directory.GetDirectories(path);
 if (cartelle.Length != 0)
 {
  // per ogni sottocartella, aggiungi al TreeViw e
  // chiama ricorsivamente te stesso

  foreach (string cartella in cartelle)
  {
   // aggiungi il path relativo al TreeView
   TreeNode newNode = new TreeNode(cartella.Substring(cartella.LastIndexOf("\\") + 1));
   newNode.ToolTip = cartella;
   node.ChildNodes.Add(newNode);
   // trova le sue sottocartelle
   ottieniSottoCartelle(cartella, newNode);
   // trova i file
   ottieniFiles(cartella, newNode, 1);
   // chiudi il nodo corrente
   newNode.CollapseAll();
  }
 }
}

ed un metodo per ottenere i file:

Listato 27. Ottenere i file nelle cartelle

public void ottieniFiles(string path, TreeNode node, int i)
{
 string[] files = Directory.GetFiles(path);
 if (files.Length == 0 && node.ChildNodes.Count == 0)
 {
  TreeNode newNode = new TreeNode("Directory is empty");
  node.ChildNodes.Add(newNode);
 }
 else
 {
  foreach (string file in files)
  {
   // aggiungi il file al TreeView
   TreeNode newNode = new TreeNode(file.Substring(path.Length + i));
   newNode.ToolTip = file;
   newNode.ImageUrl = "Immagini/doc.gif";
   node.ChildNodes.Add(newNode);
  }
 }
}

Implementiamo il gestore dell'evento Page_Load nel seguente modo:

Listato 28. Page_load per caricare il TreeView

protected void Page_Load(object sender, EventArgs e)
{
 if (!Page.IsPostBack)
 {
  TreeView1.Nodes.Add(new TreeNode(Request.PhysicalApplicationPath));
  ottieniSottoCartelle(Request.PhysicalApplicationPath, TreeView1.Nodes[0]);
  ottieniFiles(Request.PhysicalApplicationPath, TreeView1.Nodes[0], 0);
 }
}

Commentiamo brevemente il codice scritto: il primo metodo scritto, ottieniSottoCartelle(), serve a trovare le cartelle e le sottocartelle presenti nella nostra applicazione, è ricorsivo perché al suo interno c'è una chiamata a se stesso e prende come parametri il percorso dell'applicazione ed il primo nodo del TreeView; il secondo metodo, ottieniFiles(), serve a trovare i file presenti nelle cartelle e prende come parametri il path della cartella, il nodo del TreeView ed un intero che può essere zero od uno a seconda che ci si trovi nella cartella principale dell'applicazione oppure no.

Testiamo l'applicazione con F5 ed otteniamo:

Figura 3. Risultato finale

Risultato finale

I sorgenti del progetto realizzato nel corso di questa lezione possono essere scaricati da qui.

Ultimi articoli ASP.Net

LINQ e la trappola della 'deferred execution'

Una "trappola" in cui si può incappare utilizzando il risultato di...

C#, le Custom Type Conversion

Conversioni personalizzate tra classi, creare metodi particolari per...

Introduzione a Entity Framework

Il framework ORM messo a disposizione da .NET

Repeater: visualizzare un feed RSS

Utilizzare il controllo XMLDataSource e sfruttare il metodo XPath()...

Repeater, il server control "semplice"

Cos'è e come funziona il controllo Repeater

Altri articoli

Guide ASP.Net

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Guida Visual Studio 2010

L'ambiente di sviluppo di riferimento per sviluppare applicazioni su...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto