正在填充树视图asp.net

本文关键字:asp net 视图 填充 | 更新日期: 2023-09-27 18:20:55

有没有一种方法可以填充包括父文件夹的树视图?我的代码只能查看父文件夹中的文件,但一旦进入子文件夹,就无法打开。

主要问题:当文件在MapPath 的子文件夹中时,我无法打开它

这是我的,到目前为止,它只得到父节点,没有得到父节点的子文件夹:

protected void Page_Load(object sender, EventArgs e)
{
    TreeView1.Nodes[0].Value = Server.MapPath("~/Files");
}

protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
    if (e.Node.ChildNodes.Count == 0)
    {
        DirectoryInfo directory = null;
        directory = new DirectoryInfo(e.Node.Value);
        foreach (DirectoryInfo subtree in directory.GetDirectories())
        {
            TreeNode subNode = new TreeNode(subtree.Name);
            subNode.Value = subtree.FullName;
            try
            {
                if (subtree.GetDirectories().Length == 0 | subtree.GetFiles().Length == 0)
                {
                    subNode.SelectAction = TreeNodeSelectAction.SelectExpand;
                    subNode.PopulateOnDemand = true;
                    subNode.NavigateUrl = "";
                }
            }
            catch
            {
            }
            e.Node.ChildNodes.Add(subNode);
        }
        foreach (FileInfo fi in directory.GetFiles())
        {
            TreeNode subNode = new TreeNode(fi.Name);
            e.Node.ChildNodes.Add(subNode);
            subNode.NavigateUrl = "Files/" + fi.Name;
        }
    }
}

正在填充树视图asp.net

您的代码绝对没有问题。我做了一个测试,它很有魅力。所以,有几点需要指出,在你的问题中并不完全清楚。

1

您需要将TreeView1_TreeNodePopulate挂接到您的TreeView控件。您可以从标记中声明性地执行此操作。。。

<asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate">

或者,强制性地从代码背后。。。

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        TreeView1.TreeNodePopulate += TreeView1_TreeNodePopulate;
    }

否则此事件处理程序将永远不会命中

2

除了连接OnTreeNodePopulate事件之外,还需要从标记中添加至少一个节点,并将其PopulateOnDemand属性设置为true。。。

   <Nodes>
       <asp:TreeNode PopulateOnDemand="true" Text="Root"></asp:TreeNode>
   </Nodes>

如果不设置此属性,则永远不会触发此事件。添加此";根";节点是为了避免IndexOutOfRangeExceptionNullReference异常。。。

TreeView1.Nodes[0].Value = Server.MapPath("~/Files");

记住所有这些,它应该工作得很好

根据评论进行编辑

我没有注意到你说你想在点击树节点时打开文件的地方。发生这种情况是因为您在创建和添加节点时传递url。基本上,我建议在页面加载时不要使用Server.MapPath,只添加虚拟服务器路径。。。

TreeView1.Nodes[0].Value = "~/Files";

则在创建CCD_ 10对象时使用CCD_。。。

directory = new DirectoryInfo(Server.MapPath(e.Node.Value));

并且通过附加父值的来设置树节点的值(在"目录"迭代内)。。。

subNode.Value = string.Format("{0}/{1}", e.Node.Value, subtree.Name);

最后;文件";迭代,设置节点的NavigateUrl的属性,如下所示。。。

subNode.NavigateUrl = string.Format("{0}/{1}", e.Node.Value, fi.Name);

这将为您的文件节点提供一个适当的链接。请注意,这类似于使用web浏览器发出http请求,该请求将由IIS和ASP.NET管道处理。。。这意味着您将只能看到默认情况下IIS可以处理的文件(例如图像等)