2011-07-15 15 views

答えて

3

Clean, robust solutionを拡張します。また、他のコントロールにネストされたコントロールを見つけるために、階層を掘り下げるという利点もあります。

+0

私のBasePageクラスに2つのメソッドを追加します。何らかのエラーがあります:http://i.imgur.com/E3gs5.png – draw

+0

あなたのコードをもっと表示できますか?これらの関数をプログラムの範囲外に貼り付けた可能性があります。 Pastebin.comは大量のコードを貼り付けるのに最適です。 –

+0

コードの 'http:// pastebin.com/vwcC7wqZ'。 2つの方法が最後にあります。 – draw

2

は、あなただけのForm.Controls

foreach (Control c in Form.Controls) 
{ 
    if (c is DropDownList) 
    { 
    // do something 
    } 
} 
+0

ドロップダウンリストが他のコントロールにネストされていると、これは中断されませんか? –

+1

合意。私は提供されたコードで明白な問題点を指摘しようとしていました。 – joshb

0

問題は、DropDownListコントロールのいくつかは、他のコントロールに入れ子にすることができることであるとコントロールを交換する必要があります。

ページにパネルがあり、すべてのコントロールがそのパネルにある場合、ページのコントロール配列はそのパネルのみを持ち、すべてのコントロールはパネルのコントロール配列に含まれます。

ajax81にリンクされているリンクは正常に動作します。

2

それとも、この拡張機能を使用することができます。そして、あなたが特定のコントロール内System.Web.UI.Controlのいずれかのタイプの検索のためにそれを使用することができます

public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control 
    { 
     bool hit = startingPoint is T; 
     if (hit) 
     { 
      yield return startingPoint as T; 
     } 
     foreach (var child in startingPoint.Controls.Cast<Control>()) 
     { 
      foreach (var item in AllControls<T>(child)) 
      { 
       yield return item; 
      } 
     } 
    } 

を。 DropDownListコントロールの場合、あなたはそれが好きで使用することができます:

IEnumerable<DropDownList> allDropDowns = this.pnlContainer.AllControls<DropDownList>(); 
  • これはID =「pnlContainer」とPanelコントロール内のすべてのドロップダウンがあります。
関連する問題