当我使用下面的代码时,它可以工作。所有控件都是隐藏的。
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时,所有控件都被隐藏。当我把它放回去时,没有任何反应。
感谢您的帮助
答案 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)