在ASP.NET WebForm C#中迭代所有DropDownList

时间:2011-08-18 19:44:52

标签: c# asp.net

为了遍历网页上的所有DropDownList,我必须引用的对象是什么。我有一个网页,上面有几个下拉列表。我想要一段代码来执行以下操作:

foreach (DropDownList d in xxx)
{
    someFunction(d, d.ID);    
}

感谢。

7 个答案:

答案 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;