none
Comment faire pour générer un TreeView basé sur la structure de répertoire RRS feed

  • Discussion générale

  • Veuillez consulter cet exemple :

     

    ·         SetNodes : permet de modifier l'URL de navigation par itération à travers tous les nœuds

    ·         OutputDirectory : utilisé pour créer nœud correspondant à un répertoire

    ·         ConvertFileToRelativePaths : utilisé pour convertir le chemin

    ·         GenerateDirectoryTree : utilisé pour générer une arborescence de répertoire

    ·         BindDirectoryToDropDownList : utilisé pour lier les répertoires au le contrôle DropDownList

     

    MyWebsiteTreeView.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyWebsiteTreeView.aspx.cs"
        Inherits="MyWebsiteTreeView" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TreeView ID="TreeView1" runat="server">
            </asp:TreeView>
            <asp:DropDownList ID="ddlRootDirectory" runat="server">
            </asp:DropDownList>
            <asp:Button ID="btnGenerateDirectoryTree" runat="server" Text="Ggenerate Directory Tree" 
                onclick="btnGenerateDirectoryTree_Click" />
        </div>
        </form>
    </body>
    </html> 

     

     

     

    MyWebsiteTreeView.aspx.cs

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
     
    public partial class MyWebsiteTreeView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                BindDirectoryToDropDownList(ddlRootDirectory);
            }
        }
        /// <summary>
        /// changer l’arbre
        /// </summary>
        /// <param name="node"></param>
        void SetNodes(TreeNode node)
        {
            string ab = node.NavigateUrl;
            node.NavigateUrl = node.NavigateUrl.Replace("FAQ\\", "");//FAQ est le nom du repertoire
            node.NavigateUrl = node.NavigateUrl.Replace("\\", "/");//pour Firefox et IE
            if (node.ChildNodes.Count > 0)
            {
                foreach (TreeNode childNode in node.ChildNodes)
                {
                    SetNodes(childNode);
                }
            }
        }
        /// <summary>
        ///  mettre le répertoire dans un nœud
        /// </summary>
        /// <param name="directory"></param>
        /// <param name="parentNode"></param>
        /// <returns></returns>
        TreeNode OutputDirectory(System.IO.DirectoryInfo directory, TreeNode parentNode)
        {
            // valider le parametre
            if (directory == null) return null;
            // creer un noeud pour le repertoire
            TreeNode DirNode = new TreeNode(directory.Name);
            // obtenir les sous-répertoire du répertoire courant
            System.IO.DirectoryInfo[] SubDirectories = directory.GetDirectories();
            // créer des noeuds pour chaque sous-répertoire
            for (int DirectoryCount = 0; DirectoryCount < SubDirectories.Length; DirectoryCount++)
            {
                OutputDirectory(SubDirectories[DirectoryCount], DirNode);
            }
            // créer des noeuds pour les fichiers du repertoire
            System.IO.FileInfo[] Files = directory.GetFiles();
            for (int FileCount = 0; FileCount < Files.Length; FileCount++)
            {
                
                string filename = ConvertFileToRelativePaths(Files[FileCount].FullName, "FAQ");//FAQ est le nom du repertoire
                DirNode.ChildNodes.Add(new TreeNode(Files[FileCount].Name, Files[FileCount].Name, "", filename, "_blank"));
               
            }
     
            // si le noeud parent est null, retourner ce node
            // sinon, ajouter ce node au parent et retourner le parent
            if (parentNode == null)
            {
                return DirNode;
            }
            else
            {
                parentNode.ChildNodes.Add(DirNode);
                return parentNode;
            }
        }
     
        /// <summary>
        /// convertir le chemin
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="rootName"></param>
        /// <returns></returns>
        string ConvertFileToRelativePaths(string fileName, string rootName)
        {
            return fileName.Substring(fileName.LastIndexOf(rootName));
        }
        /// <summary>
        /// generer l’arborescence de repertoire
        /// </summary>
        /// <param name="tv"></param>
        void GenerateDirectoryTree(TreeView tv)
        {
            tv.Nodes.Clear();
     
            System.IO.DirectoryInfo RootDir = new System.IO.DirectoryInfo(Server.MapPath("~/" + ddlRootDirectory.SelectedValue + "/"));
            //la racine "~/"
            if (ddlRootDirectory.SelectedValue == "Root")
            {
                RootDir = new System.IO.DirectoryInfo(Server.MapPath("~/"));
            }
     
            // transferer le repertoire vers un noeud
            TreeNode RootNode = OutputDirectory(RootDir, null);
            // ajouter le noeud au TreeView
            TreeView1.Nodes.Add(RootNode);
            foreach (TreeNode node in tv.Nodes)
            {
                SetNodes(node);
            }
        }
        /// <summary>
        /// lier les données à DropDownList
        /// </summary>
        /// <param name="ddl"></param>
        void BindDirectoryToDropDownList(DropDownList ddl)
        {
            ddl.Items.Clear();
            System.IO.DirectoryInfo RootDir = new System.IO.DirectoryInfo(Server.MapPath("~/"));
            System.IO.DirectoryInfo[] SubDirectories = RootDir.GetDirectories();
            ddl.Items.Add("Root");
            foreach (DirectoryInfo dir in SubDirectories)
            {
                ddl.Items.Add(dir.Name);
            }
        }
     
        /// <summary>
        /// générer l’arbre
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGenerateDirectoryTree_Click(object sender, EventArgs e)
        {
            GenerateDirectoryTree(TreeView1);
        }
    }

     

     

     

    Pour plusieurs informations, visitez la page Foire aux Questions – ASP.NET

     

     

     

     
    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    mardi 13 avril 2010 14:31
    Modérateur