2011-02-04 7 views

答えて

1

FindControlは、あなたが探しているコントロールの名前を知っていて、再帰呼び出しではないことを超えた場合にのみ機能します。検索している特定のコンテナにコントロールがあることが保証されていない限り、そのコントロールは見つかりません。すべてのラジオボタンリストを検索するには、親子関係のすべてのコントロールセットを循環させ、radiobuttonlistをfalseに表示するように設定するメソッドを記述する必要があります。これを試してみてください

public void HideRadioButtonLists(System.Web.UI.ControlCollection controls) 
{ 
    foreach(Control ctrl in controls) 
    { 
     if(ctrl.Controls.Count > 0) HideRadioButtonLists(ctrl.Controls); 
     if("RadioButtonList".Equals(ctrl.GetType().Name, StringComparison.OrdinalIgnoreCase)) 
      ((RadioButtonList)ctrl).Visible = false; 
    } 
} 
+0

ありがとうございました –

+0

個人的には私の構文が良くなっていますが、これは明らかに意見の問題です。どのように文字列を型の名前と比較して、コントロールがその型かどうかを判断する方法は嫌いです。このような理由がありますか? – Bazzz

+0

@Bazzz - 古い習慣は激しく死ぬ。 –

0

なぜ偽=目に見えるまで、すべてのRadioButtonListsのデフォルト値を設定するには、ASP.Netの皮膚のページを使用していません。

ここではスキンページを使用しています。

3

はちょうどこの機能(テストされていない、必要がある場合がありますひねる)にPage.Controlsを渡す

protected void Page_Load(object sender, EventArgs e) 
{ 
    HideRadioButtonLists(Page.Controls); 
} 

private void HideRadioButtonLists(ControlCollection controls) 
{ 
    foreach (WebControl control in controls.OfType<WebControl>()) 
    { 
     if (control is RadioButtonList) 
      control.Visible = false; 
     else if (control.HasControls()) 
      HideRadioButtonLists(control.Controls); 
    } 
} 
0

をControlsプロパティ上のforeachを行うと種類をチェックすることになるだろうスロー。私の意見では、あなたの要求に応じて、CSS /スキンを使用して不要なボタンを隠すか、List<T>に追加するだけで、変更が必要なものだけをループすることができます。

foreachが動作する最悪のシナリオですが、少し遅くて望ましくありません。