我在包含递归嵌套子文件夹的服务器上有一个公用文件夹。 在包含图像的各种Leaf文件夹中。 我想创建一个服务器端文件浏览器,将图像显示给用户。 我正在使用ASP.NET TreeView控件。 我使用PopulateOnDemand创建树节点。 如果用户点击叶子目录,我希望该文件夹中的图像显示在DataList控件中。TreeView控件问题
的问题是,当我的子树节点上单击(后我扩大它的父节点) 所有扩展子树消失和只有父节点表明没有+符号旁边!
(我已经设置TreeView的PopulateNodesFromClient属性为true)
有人能告诉我是什么问题?
感谢
下面是代码:
<asp:TreeView ID="TreeView1" runat="server" AutoGenerateDataBindings="False"
onselectednodechanged="TreeView1_SelectedNodeChanged"
ontreenodepopulate="TreeView1_TreeNodePopulate">
</asp:TreeView>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string path = Server.MapPath(".");
PopulateTopNodes(path);
}
}
private void PopulateTopNodes(string pathToRootFolder)
{
DirectoryInfo dirInfo = new DirectoryInfo(pathToRootFolder);
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
TreeNode folderNode = new TreeNode(dir.Name,dir.FullName);
if (dir.GetDirectories().Length > 0)
{
folderNode.PopulateOnDemand = true;
folderNode.Collapse();
}
TreeView1.Nodes.Add(folderNode);
}
}
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (IsCallback == true)
{
if (e.Node.ChildNodes.Count == 0)
{
LoadChildNode(e.Node);
}
}
}
private void LoadChildNode(TreeNode treeNode)
{
DirectoryInfo dirInfo = new DirectoryInfo(treeNode.Value);
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
TreeNode folderNode = new TreeNode(dir.Name, dir.FullName);
if(dir.GetDirectories().Length>0){
folderNode.PopulateOnDemand = true;
folderNode.Collapse();
}
treeNode.ChildNodes.Add(folderNode);
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
// Retrieve the images here
}
亲爱的Jan, 谢谢您的回答。 当TreeView.PopulateNodesFromClient属性为 为true(默认值)时,TreeView执行客户端回调以检索它需要的节点 给定节点只根据需要填充一次。之后,这些值在客户端保持可用,如果同一个节点被折叠并展开,则不执行回调。 这就是控制应该表现的方式。 (也许使用SelectedNodeChanged事件与PopulateNodesFromClient等一起造成该错误?) 我会看看你推荐的例子。 谢谢 – ProgNet 2010-04-04 15:13:31
我从我的例子 [Here](http://www.aspnettutorials.com/tutorials/controls/treeview-open-files-cs.aspx) – ProgNet 2010-04-04 15:24:06
对我来说,似乎你的差异代码,并且示例是,他们在Page_Load中执行的所有操作都设置了根节点 - 其他所有内容都由客户端调用填充。您正在加载Page_Load中的所有节点。 – 2010-04-04 15:35:35