を隠しますこのASP.NETページ上のすべてのコントロールを見つけ、それらを
CType(FindControl, RadioButtonList)
ようFindControl
構文何かを使用し、その後、私は、各RadioButtonListのをループしていて、その上にVisible = False
属性を設定します推測しています。
上記のコードでエラーが発生しているようです。
私は何を試すことができますか?
おかげ
を隠しますこのASP.NETページ上のすべてのコントロールを見つけ、それらを
CType(FindControl, RadioButtonList)
ようFindControl
構文何かを使用し、その後、私は、各RadioButtonListのをループしていて、その上にVisible = False
属性を設定します推測しています。
上記のコードでエラーが発生しているようです。
私は何を試すことができますか?
おかげ
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;
}
}
なぜ偽=目に見えるまで、すべてのRadioButtonListsのデフォルト値を設定するには、ASP.Netの皮膚のページを使用していません。
ここではスキンページを使用しています。
:
はちょうどこの機能(テストされていない、必要がある場合がありますひねる)に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);
}
}
をControlsプロパティ上のforeachを行うと種類をチェックすることになるだろうスロー。私の意見では、あなたの要求に応じて、CSS /スキンを使用して不要なボタンを隠すか、List<T>
に追加するだけで、変更が必要なものだけをループすることができます。
foreachが動作する最悪のシナリオですが、少し遅くて望ましくありません。
ありがとうございました –
個人的には私の構文が良くなっていますが、これは明らかに意見の問題です。どのように文字列を型の名前と比較して、コントロールがその型かどうかを判断する方法は嫌いです。このような理由がありますか? – Bazzz
@Bazzz - 古い習慣は激しく死ぬ。 –