如何检查某种类型的控件?

时间:2012-08-03 16:59:00

标签: c# asp.net

当我使用下面的代码时,它可以工作。所有控件都是隐藏的。

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时,所有控件都被隐藏。当我把它放回去时,没有任何反应。

感谢您的帮助

3 个答案:

答案 0 :(得分:13)

我认为您所追求的是||将其更改为|| ...这是逻辑或操作符。

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

| =按位运算符

|| =逻辑或运算符

根据您的编辑

如果您希望为updatepanel的内容模板容器中的所有控件循环,则显示您的控件位于updatepanel内。

你走了:

foreach (Control ctr in UpdatePanel1.ContentTemplateContainer.Controls)
 {
  // rest of code
   if(ctr is Label || ctr is DropDownList)
     {
        ctr.Visible = false;
     }         
 }  

答案 1 :(得分: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作为参数来获取要查找的控件类型。

答案 2 :(得分:1)

|是按位或运算符。 您正在寻找||,逻辑或运算符。

 if(ctr is Label || ctr is DropDownList)