asp.net treeview包含来自数据库的文件夹和文件

时间:2017-05-25 00:05:45

标签: c# asp.net recursion treeview

我需要根据数据库中的表数据将文件夹和文件绑定到树视图,我尝试了很多解决方案,但未能满足特定要求。

这就是我正在寻找的

热门文件夹Table from database

我找到了一个示例代码并尝试实现此目的

`

 private void PopulateTreeview(DataTable dtFolders)
    {
        tvVendors.Nodes.Clear();
        HierarchyTrees hierarchyTrees = new HierarchyTrees();
        HierarchyTrees.HTree objHTree = null;
                    if (dtFolders.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dtFolders.Rows)
                        {
                            objHTree = new HierarchyTrees.HTree();

                            objHTree.LevelDepth = int.Parse(dr["level"].ToString());
                            objHTree.NodeID = int.Parse(dr["folderid"].ToString());
                            objHTree.UnderParent = int.Parse(dr["parentid"].ToString());
                            objHTree.FIleName=dr["filename"].ToString();
                            objHTree.FilePath=dr["filepath"].ToString();
                            hierarchyTrees.Add(objHTree);
                        }

                    }
        //Iterate through Collections.
        foreach (HierarchyTrees.HTree hTree in hierarchyTrees)
        {
            //Filter the collection HierarchyTrees based on 
            //Iteration as per object Htree Parent ID 
            HierarchyTrees.HTree parentNode = hierarchyTrees.Find
            (delegate(HierarchyTrees.HTree vendor)
            { return vendor.NodeID == hTree.UnderParent; });
            //If parent node has child then populate the leaf node.
            if (parentNode != null)
            {
                foreach (TreeNode tn in tvVendors.Nodes)
                {
                    //If single child then match Node ID with Parent ID
                    if (tn.Value == parentNode.NodeID.ToString())
                    {   
                        tn.ChildNodes.Add(new TreeNode
                        (hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));
                    }

                    //If Node has multiple child ,
                    //recursively traverse through end child or leaf node.
                    if (tn.ChildNodes.Count > 0)
                    {
                        foreach (TreeNode ctn in tn.ChildNodes)
                        {
                            RecursiveChild(ctn, parentNode.NodeID.ToString(), hTree);
                        }
                    }
                }
            }
            //Else add all Node at first level 
            else
            {
                tvVendors.Nodes.Add(new TreeNode
                (hTree.NodeDescription, hTree.NodeID.ToString()));
            }
        }
        tvVendors.ExpandAll();
    }

    public void RecursiveChild(TreeNode tn, string searchValue, HierarchyTrees.HTree hTree)
    {
        if (tn.Value == searchValue)
        {
            tn.ChildNodes.Add(new TreeNode
            (hTree.NodeDescription.ToString(), hTree.NodeID.ToString()));
        }
        if (tn.ChildNodes.Count > 0)
        {
            foreach (TreeNode ctn in tn.ChildNodes)
            {
                RecursiveChild(ctn, searchValue, hTree);
            }
        }
    }

问题:如果文件夹没有任何子文件夹,我无法将文件名绑定到叶节点。绑定文件。或者如果文件夹有子文件夹并且文件both.bind都在同一级别。如果文件夹为空,则没有任何内容可以将其绑定为空白。

可以请测试代码提供一些解决方案吗?

1 个答案:

答案 0 :(得分:0)

  foreach (TreeNode childnode in GetChildFolderNode(dataRow[ID].ToString(), table))
                    {
                       //Bind all folders
                    }
                    foreach (TreeNode childnode in  GetChildFileNode(dataRow[ID].ToString(), table))
                    {
                        //bind all files
                    }