TreeView根据文件扩展名更改LeafNodeStyle.ImageUrl

时间:2016-07-08 20:46:03

标签: c# treeview

我有一个ASP:TreeView,我希望根据文件扩展名在图标上显示。这是我目前的代码。我也尝试过使用相同代码的ondatabound,但这两种方法都不起作用。

protected void MyTree_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
    string fileExt = Path.GetExtension(e.Node.Selected.ToString());
    if (fileExt == ".pdf")
    {

      MyTree.LeafNodeStyle.ImageUrl = "/Images/icons/pdf_icon.png";
    }
    else
    {
      MyTree.LeafNodeStyle.ImageUrl = "/Images/icons/document_icon.png";
    }
}

上面的脚本不会遍历文件结构。在下面的示例中,pdf文件应具有pdf图标,其余文件图标。

enter image description here

1 个答案:

答案 0 :(得分:1)

Server.MapPath 指定要映射到物理的相对或虚拟路径,但ImageUrl值必须是绝对URL或相对URL。
你需要 替换

MyTree.LeafNodeStyle.ImageUrl = Server.MapPath("~/Images/icons/pdf_icon.png");

MyTree.LeafNodeStyle.ImageUrl = "/Images/icons/pdf_icon.png";

修改

- e.Node返回示例中“护理”节点的展开节点,但您需要循环浏览e.Node.ChildNodes
  - e.Node.Selected返回应使用e.Node.Text获取节点文本的布尔值   - MyTree.LeafNodeStyle.ImageUrl更改树中的所有叶子样式,因此您需要为每个叶子更改ImageUrl


这段代码必须完成这项工作。

    protected void MyTree_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        for (int i = 0; i < e.Node.ChildNodes.Count; i++)
        {
            if (e.Node.ChildNodes[i].ChildNodes.Count != 0)
                continue;
            string fileExt = Path.GetExtension(e.Node.ChildNodes[i].Text);

            if (fileExt == ".pdf")
            {
                e.Node.ChildNodes[i].ImageUrl = "/Images/icons/pdf_icon.png";
            }
            else
            {
                e.Node.ChildNodes[i].ImageUrl = "/Images/icons/document_icon.png";
            }
        }
    }