为了遍历网页上的所有DropDownList,我必须引用的对象是什么。我有一个网页,上面有几个下拉列表。我想要一段代码来执行以下操作:
foreach (DropDownList d in xxx)
{
someFunction(d, d.ID);
}
感谢。
答案 0 :(得分:2)
如果您不需要担心嵌套控件,在这种情况下您需要递归,则下面的内容应该可以正常工作。
foreach(DropDownList list in Controls.OfType<DropDownList>())
{
//TODO: Something with list
}
如果需要递归,你可以制作如下方法..
public static IEnumerable<Control> GetAllControls(Control parent)
{
if(null == parent) return null;
return new Control[] { parent }.Union(parent.Controls.OfType<Control>().SelectMany(child => GetAllControls(child));
}
然后修改你的循环...
foreach(DropDownList list in GetAllControls(this).OfType<DropDownList>())
{
//TODO: Something with list
}
答案 1 :(得分:1)
没有神奇的所有控制容器。您将不得不以递归方式遍历控制树并找到所有下拉列表。
public void DoSomethingForAllControlsOf<T>(Control thisControl, Action<T> method)
where T: class
{
if(thisControl.Controls == null)
return;
foreach(var control in thisControl.Controls)
{
if(control is T)
method(control as T);
DoSomethingForAllControlsOf<T>(control, method);
}
}
那应该递归地向下走控制树并在类型T的所有元素上调用该方法。例如:
DoSomethingForAllControlsOf<DropDownList>(this, someFunction);
答案 2 :(得分:1)
foreach (var dropDownList in Page.Controls.OfType<DropDownList>())
{
}
答案 3 :(得分:0)
您无法在其上运行foreach循环,因为尽管您有许多DropDownLists,但它们不是可迭代集合的一部分。但是,您可以将每个DropDownList存储到一个数组中,并遍历该数组。
答案 4 :(得分:0)
要获取所有下拉控件,您可能需要以递归方式循环。您可以使用此功能执行此操作:
public Control DisableDropDowns(Control root)
{
foreach (Control ctrl in root.Controls)
{
if (ctrl is DropDownList)
((DropDownList)ctrl).Enabled = false;
DisableDropDowns(ctrl);
}
}
答案 5 :(得分:0)
LINQ方式:
首先,你需要一个扩展方法来获取你感兴趣的类型的所有控件:
//Recursively get all the formControls
public static IEnumerable<Control> GetAllControls(this Control parent)
{
foreach (Control control in parent.Controls)
{
yield return control;
foreach (Control descendant in control.GetAllControls())
{
yield return descendant;
}
}
}`
然后你可以按照自己的意愿进行迭代:
var formCtls = this.GetAllControls().OfType<DropDownList>();`
foreach(DropDownList ddl in formCtls){
//do what you gotta do ;)
}
答案 6 :(得分:0)
while(dropdownlist1.SelectedIndex++ < dropdownlist1.Items.Count)
{
if (dropdownlist1.SelectedValue == textBox1.text)
{
// do stuff here.
}
}
//resetting to 0th index(optional)
dropdownlist1.SelectedIndex = 0;