2014-03-26 32 views
0

嗨,我使用字典來填充我的TreeView ...如何使用字典

Dictionary<int, Dictionary<string, int>> management = new Dictionary<int, Dictionary<string, int>>(); 

現在管理具有以下值

ID Name    Parent 
1 Manager    0 
2 Accountant   0 
3 Assistant Manager 1 
4 Branch Manager   1 
5 Employee1   3 
6 Employee3   3 
7 Employee2   4 
8 Accountant1   2 
9 Accountant2    2 

在後面DispalyTree(代碼)是填充樹狀該填充我的TreeView與詞典功能vaules ..我知道下面的代碼是不完整的..我只是成功的顯示管理器和會計師,我不知道如何來填充其子節點..

我曾嘗試了這麼多,但沒能做到..我堅持這個像1周..請幫助

public void DisplayTree() 
     { 
       TreeNode parentnode = new TreeNode(); 
       TreeBL l_bltree = new TreeBL(); 
       Dictionary<int, Dictionary<string, int>> manage = new Dictionary<int, Dictionary<string, int>>(); 
       manage = l_bltree.ChildTree(); 
       foreach (var kvp in manage) 
       { 
        var innerDict = kvp.Value; 
        foreach (var innerKvp in innerDict) 
        { 
         parentnode = new TreeNode(innerKvp.Key); 
         if (innerKvp.Value == 0) 
         { 
          treeview.Nodes.Add(parentnode); 
         } 
        }    
       } 

     } 
+1

什麼樹狀WPF,WinForms的? – markmnl

+0

asp.net web應用程序 – user2380844

回答

0

我認爲你正在尋找建立一個樹視圖中的邏輯給出一個層次。

的值是存在於employees PARAM。建立一個Id->Employee map,通過迭代值,發現parent並添加employeeparentchild。最後你只想要root或其children

// quick and dirty class 
public class Employee 
{ 
    public int Id; 
    public string Name; 
    public int ParentId; 
    public IList<Employee> Children = new List<Employee>(); 
    public override int GetHashCode() 
    { 
     return Id; 
    } 
    public override bool Equals(object obj) 
    { 
     Employee that; 
     return 
      obj != null 
      && (that = obj as Employee) != null 
      && Id == that.Id; 
    } 
} 

// O(n) time, O(n) space for hashmap 
public Employee BuildTreeView(IEnumerable<Employee> employees) 
{ 
    var rootEmployee = new Employee() { Id = 0 }; 
    var IdToEmployeeMap = employees.ToDictionary(e => e.Id); 
    IdToEmployeeMap[0] = rootEmployee; 
    foreach (var employee in employees) 
    { 
     var parentEmployee = IdToEmployeeMap[employee.ParentId]; 
     parentEmployee.Children.Add(employee); 
    } 
    return rootEmployee; // or return rootEmployee.Children if interested in children 
}