正在填充树视图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;
}
}
}
您的代码绝对没有问题。我做了一个测试,它很有魅力。所以,有几点需要指出,在你的问题中并不完全清楚。
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>
如果不设置此属性,则永远不会触发此事件。添加此";根";节点是为了避免IndexOutOfRangeException
或NullReference
异常。。。
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可以处理的文件(例如图像等)