2013-03-12 51 views
4

這是一段時間,因爲我不得不做樹遍歷並且想要一些輸入。下面是一個簡單的樹:如何解決這個樹遍歷

tree

樹是我的ASP.NET頁面。該頁面由2個主頁面和內容頁面組成。我想要做的是找到作爲我的第二個母版頁的主要內容的控件,然後將所有控件放在平面數據結構(如列表)中。

因此,鑑於橙色節點是第二個母版頁的主要ContentPlaceHolder,我想將所有那些存儲在我的列表中的藍色橢圓。我已經創建了一些代碼,返回我所有的孩子,孫子,等控制的集合在此:

private IEnumerable<Control> GetChildControls(Control parentControl) 
{ 
    foreach (Control control in parentControl.Controls) 
    { 
     yield return control; 
     foreach(Control grandchild in GetChildControls(control)) 
     { 
      yield return grandchild; 
     } 
    } 
} 

但我停留在如何將這些樹過濾到節點的位和它的孩子。如果有幫助,橙色的節點應該是以下幾點:

<asp:Content ID="SystemMasterMainContentPlaceHolder" runat="server" ContentPlaceHolderID="MainContentPlaceholder"> 

回答

2

你基本上可以使用已有的方法和GetChildById()方法的組合。

private Control GetChildById(string controlId, Control parent) 
{ 
    return GetChildControls(parent).First(c => c.ID == controlId); 
} 

這將重新使用樹遍歷由GetChildControls完成。請注意,如果找不到控件,它將引發異常 - 如果您不需要,請使用FirstOrDefault而不是First

你可能會使用它,像這樣:

GetChildControls(GetChildById("SystemMasterMainContentPlaceHolder", Page));