2017-05-25 19 views
0

データベースからのテーブルデータに基づいてフォルダとファイルをツリービューにバインドする必要がありますが、私は多くのソリューションを試しましたが、特定の要件を満たせませんでした。ここで asp.net treeview with folders and database with

は、私は1つのサンプルコードを発見し、この

`

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); 
      } 
     } 
    } 

問題を達成しようとしているもの

トップフォルダTable from database

を探してイムです:私はできませんよフォルダにサブフォルダがない場合、ファイル名をリーフノードにバインドします。ファイルをバインドします。またはフォルダにサブフォルダがあり、both.bindを両方とも同じレベルでファイルしている場合フォルダが空の場合は、空白にバインドするだけのものはありません。

は、コードをテストしてもらえ

答えて

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 
        } 
一部solution`を提供