5

以下のコードを使用すると、機能します。すべてのコントロールが非表示になります。

foreach (Control ctr in eItem.Controls)
{
    ctr.visible = false;                  
}

ただし、ラベルとドロップダウンリストのみを非表示にします。だから私は成功せずに以下のコードを使おうとしています

foreach (Control ctr in eItem.Controls)
{
    if(ctr is Label | ctr is DropDownList)
    {
       ctr.visible = false;
    }              
}

編集

これが全体の方法です

 private void HideLabelAndDDLOnPageLoad()
    {
        foreach (ListViewItem eItem in lsvTSEntry.Items)
        {
            foreach (Control ctr in eItem.Controls)
            {
                if (ctr is Label || ctr is DropDownList)
                {
                    ctr.Visible = false;
                }  
            }
        }
    }

ifを削除すると、すべてのコントロールが非表示になります。私がそれを元に戻すとき、何も起こりません。

助けてくれてありがとう

4

3 に答える 3

14

あなたが求めているのは、それを論理和または演算子に||変更することだと思います。||

foreach (Control ctr in eItem.Controls)
{
    if(ctr is Label || ctr is DropDownList)
    {
       ctr.Visible = false;
    }              
}

|=ビット演算子

||=論理または演算子

あなたの編集に基づく

updatepanel更新パネルのコンテンツテンプレートコンテナ内のすべてのコントロールをループする場合は、コントロールがの中にあるように見えます。

どうぞ:

foreach (Control ctr in UpdatePanel1.ContentTemplateContainer.Controls)
 {
  // rest of code
   if(ctr is Label || ctr is DropDownList)
     {
        ctr.Visible = false;
     }         
 }  
于 2012-08-03T17:00:49.540 に答える
1

正確なマークアップがないと、ここで解決策を推測することしかできません。

パネルや他のコンテナのように、ListViewのItemTemplate内にコントロールをラップするには、別のコンテナを使用している必要があります。リストビューアイテムでコントロールを取得すると、その子(ラベル、ドロップダウンなど)ではなく、ワーピングコンテナが実際に取得されます。これに対する1つの解決策は、次のようなものです。

foreach (ListViewItem item in lsvTSEntry.Items)
{
    item.FindControl("myLabel").Visible = false;
    item.FindControl("myDropdownList").Visible = false;
}

基本的に、idでコントロールを検索し、それらを非表示にしようとします。ここではエラーチェックが行われていないため、FindControlがnullを返した場合にNullReferenceExceptionが発生する可能性があることに注意してください。

ItemTemplateにネストされたコンテナがあり、それらがどこにあるかに関係なくすべてのラベルとドロップダウンを非表示にしたい場合は、次のような独自の再帰的なFindControlを実装できます。

private Control FindControlRecursive(Control rootControl, string controlId)
{
    if (rootControl.ID == controlId)
    {
        return rootControl;
    }

    foreach (Control controlToSearch in rootControl.Controls)
    {
        Control controlToReturn = FindControlRecursive(controlToSearch, controlId);
        if (controlToReturn != null)
        {
            return controlToReturn;
        }
    }

    return null;
}

最もエレガントではありませんが....これを変更して、速度を上げるためにIDの配列を取得することができます。もちろん、これに基づいて、コントロールタイプによる検索を実装できます。これは、パラメータとしてcontrolIdを取得する代わりに、検索するコントロールのタイプを取得します。

于 2012-08-03T17:01:04.353 に答える
1

| ビット単位または演算子です。論理または演算子である||を探しています。

 if(ctr is Label || ctr is DropDownList)
于 2012-08-03T17:01:46.613 に答える