L'interface ihierarchicalenumerable - bindez vos menu/treeview avec votre propre source de données

Description

Lorsque l'on utilise les controles Menu ou treeview d'asp.net on se sert généralement d'un XMLDataSource/SiteMapDataSource ou alors si veut dynamiquement peupler le controle on modifie directement la collection de noeuds.

Mais il existe une autre solution qui permet de faire
monTreeview.DataSource = myFiles;
monTreeview.DataBind();

La seule condition est que myFiles implémente IHierarchicalEnumerable.

Dans cet exemple je montre comment implémenter IHierchicalEnumerable pour afficher les fichiers et sous dossier d'un dossier. Je montre également comment créer son propre controle de datasource.

Source / Exemple :


protected void Page_Load(object sender, EventArgs e)
    {
        // on bind notre treeview avec les fichiers/dossier contenu dans le dossier d:/www/
        tv1.DataSource = new FileSystem(@"d:\www\", true);
        tv1.DataBind();
    }

    <asp:TreeView ID="tv1" runat="server" ImageSet="XPFileExplorer" NodeIndent="15" ExpandDepth="1" EnableViewState="false">
        <ParentNodeStyle Font-Bold="False" />
        <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
        <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
            VerticalPadding="0px" />
        <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"
            NodeSpacing="0px" VerticalPadding="2px" />
            <DataBindings>
                <asp:TreeNodeBinding TextField="Name" />
            </DataBindings>
    </asp:TreeView>

---- Deuxieme solution possible en utilisant un FileSystemDatasource 

    <asp:TreeView ID="tv1" runat="server" ImageSet="XPFileExplorer" NodeIndent="15" ExpandDepth="1" DataSourceID="fsds1" EnableViewState="false">
        <ParentNodeStyle Font-Bold="False" />
        <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
        <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
            VerticalPadding="0px" />
        <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"
            NodeSpacing="0px" VerticalPadding="2px" />
            <DataBindings>
                <asp:TreeNodeBinding TextField="Name" />
            </DataBindings>
    </asp:TreeView>
    <test:FileSystemDataSource  runat="server" id="fsds1" rootPath="d:/www/" />

Conclusion :


Cet exemple permet seulement de montrer l'utilisation des datasource Hierarchique. Mon code doit surement lever une exception dans le cas où l'utilisateur ASP.net n'a pas accès aux fichiers, etc...

Dans la vrai vie, il faudra gérer ces cas mais il est très rare de devoir mapper un treeview avec un hierarchie déjà existante ;-)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.