ciao,
gli HierarchicalDataBoundControl come il Menu e la TreeView vogliono come DataSource un oggetto che implementi o l'interfaccia IHierarchicalEnumerable o la IHierarchicalDataSource.
L'esempio che hai trovato su MSDN mostra per l'appunto come realizzare un controllo in grado di funzionare come sorgente dati perché implementa la IHierarchicalDataSource, come si vede da questa riga di codice.
public class FileSystemDataSource : HierarchicalDataSourceControl, IHierarchicalDataSource
doppiomango ha scritto:
non è ne chiaro ne sembra contenga quello che cerco...
Capisco il motivo della confusione, effettivamente lì non mostrano solo il codice essenziale ma lo hanno arricchito con tutto ciò che serve per leggere dati dal file system. E questo è un altro punto che rende l'esempio non perfettamente idoneo al tuo caso: tu vuoi leggere i dati dal db e non dal filesystem.
Comunque, se lo studi meglio e capisci cosa hanno voluto realizzare, è probabile che riuscirai ad adattarlo al tuo caso.
bisogna usare un binding di tipo HierarchicalDataSourceControl
Non necessariamente. Come ripeto, è sufficiente una classe (e non per forza un controllo) che implementi IHierarchicalEnumerable o IHierarchicalDataSource.
Spezza il problema in due parti:
- Creazione di una classe che implementi una delle due interfacce richieste
- "Proiettare" il risultato ottenuto dal database su quella classe. Dato che il tuo codice già stampa i dati in ordine gerarchico, allora completare questo punto sarà abbastanza facile. Non dovrai più "stampare" ma istanziare degli oggetti.
Per il primo punto, inizia scrivendoti una classe tipo questa:
public class Pagina
{
public string Titolo { get; set; }
public string Percorso { get; set; }
List<Pagina> Sottopagine { get; set; }
}
Come vedi, questa classe Pagina è idonea a realizzare una struttura dati gerarchica perché al suo interno contiene una collezione di altri oggetti Pagina dipendenti da essa.
Prosegui facendole implementare IHierarchicalDataSource e da lì, piano piano e senza scoraggiarti, vai avanti. Scoprirari che "Sottopagine" non può essere una List<Pagina> pura e semplice, ma dovrà implementare anche IHierarchicalEnumerable. Ci arriverai implementando un metodo alla volta, magari aiutati con un reflector tipo
JustDecompile per capire come altre classi del .NET framework hanno implementato quell'interfaccia.
Anche se dovessi impiegare alcune ore per ottenere un risultato, sarà stato tempo ben speso perché si tratta di un'ottima attività formativa.
doppiomango ha scritto:
Mi servirebbero alcuni esempi chiari, magari un paio di link anche con database semplici.
Intanto cimentati, poi domani se ho un po' di tempo libero ti mando degli esempi di codice. Qui pure ne trovi uno abbastanza chiaro.
http://www.codeproject.com/Articles/19639/Implementing-IHierarchy-Support-Into-Your-Custom-Cciao
Modificato da BrightSoul il 06 novembre 2012 00.31 -