在ASP中遍历所有下拉列表.. NET WebForm c#
本文关键字:下拉列表 NET WebForm ASP 遍历 | 更新日期: 2023-09-27 18:06:07
为了遍历网页上的所有下拉列表,我必须引用的对象是什么?我有一个网页上有几个下拉列表。我想要这样一段代码:
foreach (DropDownList d in xxx)
{
someFunction(d, d.ID);
}
谢谢。
如果你不需要担心嵌套的控件,在这种情况下你需要递归,下面的东西应该可以工作。
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
}
foreach (var dropDownList in Page.Controls.OfType<DropDownList>())
{
}
没有神奇的全控制容器。你需要递归地遍历控制树,找到所有的下拉列表。
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);
你不能在上面运行foreach循环,因为尽管你有很多dropdownlist,但它们不是可迭代集合的一部分。但是,您可以将每个DropDownList存储到一个数组中,并遍历该数组。
要获得所有下拉控件,您可能需要递归地进行循环。您可以使用以下函数:
public Control DisableDropDowns(Control root)
{
foreach (Control ctrl in root.Controls)
{
if (ctrl is DropDownList)
((DropDownList)ctrl).Enabled = false;
DisableDropDowns(ctrl);
}
}
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 ;)
}
while(dropdownlist1.SelectedIndex++ < dropdownlist1.Items.Count)
{
if (dropdownlist1.SelectedValue == textBox1.text)
{
// do stuff here.
}
}
//resetting to 0th index(optional)
dropdownlist1.SelectedIndex = 0;