2013-10-30 81 views
0

我有樹形結構的複選框,想要訪問樹視圖中的子節點的子節點。如何在樹視圖中訪問子節點的孩子節點WPF

這是我如何做一個treeview,我想訪問level4項檢查和取消選中值,以便我可以插入數據庫。

private void FillingTreeDynamic() 
    { 
     Nodes.Clear(); 
     var data = dbobj.GetDataFromDataBase("", "Select * from Master"); 
     foreach (DataRowView dr in data) 
     { 
      var level_1_items = new Node() { Text = dr["MasterName"].ToString(),IsChecked=false}; 
      var details = dbobj.GetDataFromDataBase("", "Select * from Details where MasterID='"+Convert.ToInt32(dr["ID"].ToString())+"'"); 
      foreach(DataRowView row in details) 
      { 
       var level_2_items = new Node() { Text = row["SubName"].ToString(),IsChecked=false}; 
       level_2_items.Parent.Add(level_1_items); 
       level_1_items.Children.Add(level_2_items); 
       var level_3_items = new Node() { Text ="View",IsChecked=false }; 
       level_3_items.Parent.Add(level_2_items); 
       level_2_items.Children.Add(level_3_items); 
       var dataView = dbobj.GetDataFromDataBase("","select * from ViewDetails"); 
       foreach (DataRowView rowview in dataView) 
       { 
        var level_4_items = new Node() {Text=rowview["RightsName"].ToString(), IsChecked = false }; 
        level_4_items.Parent.Add(level_3_items); 
        level_3_items.Children.Add(level_4_items); 
       } 

      }   

      Nodes.Add(level_1_items); 
     } 
     treeView.ItemsSource = Nodes; 

    } 

我能夠訪問子節點及其值,如下所示。

public ObservableCollection<Node> Nodes { get; private set; } 
foreach (var parent in Nodes) 
{ 
    if (parent.IsChecked == true) 
    { 
     foreach (var item in parent.Children) 
     { 
      if (item.IsChecked == true) 
       { 
       } 
      else 
      { 
      } 
     } 
else 
    { 
    }  
} 
} 

我該如何訪問父節點子節點的子節點。任何想法如何訪問這些子節點。 在此先感謝。

+0

只是爲您的信息一個很好的文章在這裏http://www.codeproject.com/Articles/124644/Basic-Understanding-of-Tree-View-in-WPF –

回答

0

我自己想出了這個問題的解決方案。這就是我訪問兒童節點的parent.children的方式。

foreach (var parent in Nodes) 
{ 


if (parent.IsChecked == true) 
{ 
foreach (var item in parent.Children) 
{ 
if (item.IsChecked == true) 
{ 
} 
else 
{ 
} 
foreach(var vtemp in item.Children) 
{ 
    foreach (var vtemp1 in vtemp.Children) 
    { 
     // and did my logic 
    } 
    } 
} 
else 
{ 
} 
}