2011-02-25 77 views
2

ASP.NET 2.0 Web窗體如何遍歷用戶控件中的控件以找到某個控件?

那麼如何遍歷用戶控件中的所有控件並找到某種類型的控件並向其添加事件?

我有類似的問題How do I add a event to an ASP.NET control when the page loads?處理添加事件 - 但這是不同的,如果我想找到一個控件。

SCENARIO

控制是一個定製的控制:

<asp:Repeater runat="server" ID="options" OnItemDataBound="options_OnItemDataBound"> 
<HeaderTemplate> 
    <table border="0" cellpadding="0" cellspacing="0" width="100%"> 
     <tr> 
</HeaderTemplate> 
<ItemTemplate> 
      <td> 
       <span> 
        <asp:Label runat="server" ID="optionName"> 
        </asp:Label> 
        <asp:DropDownList runat="server" ID="optionValues" CssClass="PartOption"> 
        </asp:DropDownList> 
       </span> 
      </td> 
</ItemTemplate> 
<FooterTemplate> 
     </tr> 
    </table> 
</FooterTemplate> 
</asp:Repeater> 

上的用戶控制的定製控制聲明:

<td><def:CustomControl id="somePartOptions" runat="server"></td> 

在用戶控制的後面的代碼,我在Page_Load事件中嘗試了以下內容:

foreach(Control control in partOptions.Controls) { 
      FindDropDownControl(control); 
} 

    protected void FindDropDownControl(Control controlContainer) { 
     bool isRepeater = false; 
     if (controlContainer is Repeater) { 
      isRepeater = true; 
     } 

     if (controlContainer.HasControls()) { 
      foreach (Control subControl in controlContainer.Controls) { 
       FindDropDownControl(subControl); 
      } 
     } 
    } 

但是,布爾標誌始終爲false。那麼我在做什麼?我最終想在轉發器的itemTemplate中找到dropdownlist控件,但我甚至找不到轉發器。

感謝,

+0

可能的重複:http://stackoverflow.com/questions/619449/find-a-control-in-a-webform – Marcel 2013-10-17 08:10:46

回答

2

我用這個方法來獲得在容器控件列表(在每一層嵌套):

List<Control> repeaters = GetControlsByType(containerControl, typeof (Repeater)); 

public static List<Control> GetControlsByType(Control ctl, Type type) 
    { 
     List<Control> controls = new List<Control>(); 

     foreach (Control childCtl in ctl.Controls) 
     { 
      if (childCtl.GetType() == type) 
      { 
       controls.Add(childCtl); 
      } 

      List<Control> childControls = GetControlsByType(childCtl, type); 
      foreach (Control childControl in childControls) 
      { 
       controls.Add(childControl); 
      } 
     } 

     return controls; 
    } 

您可以通過這種方式,使用T

相關問題