2017-02-08 10 views
0

Я пытаюсь заполнить древовидную структуру ссылками.URL to treeview

У меня есть этот массив:

String[] Paths = { 
      "Home/Girls/Smoll", 
      "Home/Girls/Pige", 
      "Home/Girls/Manually", 
      "Home/Man/Smoll", 
      "Home/Man/Pige", 
      "index/domain/index", 
      "index/ur" 
}; 

меня сделать это как то, что я хочу быть закодировал:

http://i.imgur.com/YAoSTp0.jpg

Но моя проблема заключается в массив не является постоянной величиной, может быть, меняется другое значение.

+0

Используйте 'String.split()', чтобы разбить строку на '/', затем перебирать массив и проверить в де узлов существует. Если нет, добавьте их. –

+2

Вам нужно показать, что вы сделали, Stack Overflow не существует, чтобы написать код для вас. Я боюсь. – DavidG

ответ

0

Используйте рекурсивный алгоритм

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 


namespace WindowsFormsApplication24 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      string[] Paths = { 
       "Home/Girls/Smoll", 
       "Home/Girls/Pige", 
       "Home/Girls/Manualy", 
       "Home/Man/Smoll", 
       "Home/Man/Pig", 
       "index/domain/index", 
       "index/ur" 
      }; 
      List<List<string>> splitPaths = Paths.Select(x => x.Split(new char[] { '/' }).ToList()).ToList(); 
      TreeNode node = new TreeNode(); 
      RecursiveAdd(splitPaths, node); 
      treeView1.Nodes.Add(node); 
      treeView1.ExpandAll(); 
     } 
     public void RecursiveAdd(List<List<string>> splitPaths, TreeNode node) 
     { 
      var groups = splitPaths.GroupBy(x => x[0]).ToList(); 
      foreach (var group in groups) 
      { 
       TreeNode childNode = node.Nodes.Add(group.Key); 
       List<List<string>> children = group.Where(x => x.Count() > 1).Select(x => x.Skip(1).ToList()).ToList(); 
       RecursiveAdd(children, childNode); 
      } 
     } 

    } 

} 
+0

Спасибо! это работа! и весь ваш код - ясность, но это | "var groups = splitPaths.GroupBy (x => x [0]). ToList();" Можете ли вы это объяснить –

+0

Я группируюсь по текущим именам корневых папок. Позже в коде я удаляю корень при получении детей с помощью x.skip (1). Таким образом, первоначально первые две группы были бы Home и index. – jdweng

 Смежные вопросы

  • Нет связанных вопросов^_^