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 中,例如 Panel 或其他容器。当您在列表视图项上获得控件时,您实际上获得的是变形容器而不是其子项(标签、下拉列表等)。对此的一种解决方案是:

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 回答