如何在Asp.net中使用Checkbox构建Treeview

时间:2012-10-18 16:43:39

标签: c# asp.net treeview

我想根据输入路径显示所有目录。到目前为止,我实现了树视图。如何使用复选框制作Asp.net树视图?

这是我的代码

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
   // ListDirectory(tvTreeView, Server.MapPath("~/"));
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("~/"));
    TreeNode mainNode = new TreeNode();

    mainNode.Text = dir.Name;
    mainNode.Checked = true;
    mainNode.NavigateUrl = "~/" + dir.Name;
    TreeView1.Nodes.Add(mainNode);
    foreach (DirectoryInfo subDir in dir.GetDirectories())
    {
        TreeNode parentNode = new TreeNode();

        parentNode.Text = subDir.Name;
        parentNode.NavigateUrl = "~/" + dir.Name + "/" + subDir.Name;


        foreach (FileInfo file in subDir.GetFiles())
        {
            TreeNode subNode = new TreeNode();


            subNode.Text = file.Name;
            subNode.NavigateUrl = "~/" + dir.Name + "/" + subDir.Name + "/" + file.Name;

            //Add it to the parent node
            parentNode.ChildNodes.Add(subNode);
        }

        TreeView1.Nodes[0].ChildNodes.Add(parentNode);
    }
}

2 个答案:

答案 0 :(得分:0)

如果没有完全消化你的代码,我认为你遇到的问题(并没有说明)是树只显示这些文件夹中的一个级别的子文件夹和文件。

这是recursion的主要用例。

如果这是你的问题,那么你可以通过递归来解决这个问题,如下所示(注意 - 这是adhoc - 所以用它作为基础,用一粒盐):

private void AddNodeForDirectory(DirectoryInfo directory, TreeNode directoryNode)
{
    foreach (DirectoryInfo subDirectory in directory.GetDirectories())
    {
        TreeNode subDirectoryNode = new TreeNode
        {
            Text = subDirectory.Name,
            NavigateUrl = // some path... I leave this to you 
        };

        foreach (FileInfo file in subDirectory.GetFiles())
        {
            TreeNode fileNode = new TreeNode
            {
                Text = file.Name,
                NavigateUrl = // some path... I leave this to you
            };  

            subDirectoryNode.ChildNodes.Add(fileNode);
        }

        directoryNode.ChildNodes.Add(subDirectoryNode);

        // Here is the recursion
        this.AddNodeForDirectory(subDirectory, subDirectoryNode);
    }
}

这个想法是你调用方法,传入root directoryinfo和root treenode,然后通过深入到目录信息来递归填充树。另请注意,递归可能导致堆栈溢出,因此您应该意识到危险。

答案 1 :(得分:0)

将树视图的CheckBoxes属性设置为true。

treeView1.CheckBoxes = true;