欢迎光临
我们一直在努力

【原】根据网站动态目录生成树结构,并用TreeView输出【提供源码下载,有详细注释】

各位博友好,本着共享的原则,本人花了点时间写了个这棵树,虽然简单,但是应该很实用。

我知道我们可以使用 Web.sitemap 来实现,但是用Web.sitemap 需要预先写好配置,我写这个就不需要考虑配置了。

比如说你的目录改变了,那么自动生成树也会跟着变动,下面贴代码:

【原】根据网站动态目录生成树结构,并用TreeView输出【提供源码下载,有详细注释】【原】根据网站动态目录生成树结构,并用TreeView输出【提供源码下载,有详细注释】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 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>

 

【原】根据网站动态目录生成树结构,并用TreeView输出【提供源码下载,有详细注释】【原】根据网站动态目录生成树结构,并用TreeView输出【提供源码下载,有详细注释】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
{
    
/// <summary>
    
/// 页面加载时,就动态绑定目录到DropDownList控件
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        
if (!Page.IsPostBack)
        {
            BindDirectoryToDropDownList(ddlRootDirectory);
        }
    }

    /// <summary>
    
///  调整树节点,使与Firefox 浏览器兼容
    
/// </summary>
    
/// <param name="node"></param>
    void SdjustNodes(TreeNode node)
    {

        string ab = node.NavigateUrl;
        
//Suodaosoft 是根目录名
        node.NavigateUrl = node.NavigateUrl.Replace("Suodaosoft\\""");
        node.NavigateUrl 
= node.NavigateUrl.Replace("\\""/");//与 Firefox 兼容,IE 能识别“\\”,可是FireFox 不能识别
        if (node.ChildNodes.Count > 0)
        {
            
foreach (TreeNode childNode in node.ChildNodes)
            {
                SdjustNodes(childNode);
            }

        }
    }
    TreeNode OutputDirectory(System.IO.DirectoryInfo directory, TreeNode parentNode)
    {
        // 检验目录是否为空
        if (directory == nullreturn null;

        // 为目录建立节点
        TreeNode DirNode = new TreeNode(directory.Name);

        // 从当前目录得到子目录
        System.IO.DirectoryInfo[] SubDirectories = directory.GetDirectories();

        // 得出子目录
        for (int DirectoryCount = 0; DirectoryCount < SubDirectories.Length; DirectoryCount++)
        {
            OutputDirectory(SubDirectories[DirectoryCount], DirNode);
        }

        // 输出当前目录文件
        System.IO.FileInfo[] Files = directory.GetFiles();

        for (int FileCount = 0; FileCount < Files.Length; FileCount++)
        {
            
//------------------------------------
            
//注意,我注释了if 的条件!
            
//这儿其实有个小技巧
            
//可以筛选你想要的文件
            
//------------------------------------
            
//if (Files[FileCount].Extension == ".htm")
            
//{
            string filename = ConvertFileToRelativePaths(Files[FileCount].FullName, "Suodaosoft");
            DirNode.ChildNodes.Add(
new TreeNode(Files[FileCount].Name, Files[FileCount].Name, "", filename, "_blank"));
            
//}
        }

        //如果父节点是NULL, 就返回本节点
        
//否则就加到父节点,并返回父节点
        if (parentNode == null)
        {
            
return DirNode;
        }
        
else
        {
            parentNode.ChildNodes.Add(DirNode);
            
return parentNode;
        }
    }
    
/// <summary>
    
/// 转换文件路径
    
/// </summary>
    
/// <param name="fileName">文件名</param>
    
/// <param name="rootName">根目录名</param>
    
/// <returns>目录</returns>
    string ConvertFileToRelativePaths(string fileName, string rootName)
    {
        
return fileName.Substring(fileName.LastIndexOf(rootName));
    }
    
/// <summary>
    
/// 建立目录树
    
/// </summary>
    
/// <param name="tv"></param>
    void GenerateDirectoryTree(TreeView tv)
    {
        tv.Nodes.Clear();

        System.IO.DirectoryInfo RootDir = new System.IO.DirectoryInfo(Server.MapPath("~/" + ddlRootDirectory.SelectedValue + "/"));
        
if (ddlRootDirectory.SelectedValue == "Root")
        {
            RootDir 
= new System.IO.DirectoryInfo(Server.MapPath("~/"));
        }

        // 把目录树输出到一个节点
        TreeNode RootNode = OutputDirectory(RootDir, null);
        
// 把目录树加入根节点
        TreeView1.Nodes.Add(RootNode);
        
foreach (TreeNode node in tv.Nodes)
        {
            SdjustNodes(node);
        }
    }
    
/// <summary>
    
///  把动态目录绑定到DropDownList控件上,供选择目录,如果选择Root,表示项Web工程的根节点
    
/// </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>
    
/// 根据DropDownList选择的目录,动态产生树
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>
    protected void btnGenerateDirectoryTree_Click(object sender, EventArgs e)
    {
        GenerateDirectoryTree(TreeView1);
    }
}

 

具体应用,请在下面的这个链接上下载整个应用项目示例:

http://www.cnblogs.com/OceanChen/archive/2009/02/04/1383794.html

 

如果你有什么好的技术观点,你可以参与技术讨论,谢谢你的观点!

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《【原】根据网站动态目录生成树结构,并用TreeView输出【提供源码下载,有详细注释】》
文章链接:https://www.456zj.com/10008.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址