如何在页面中找到所有DropDownList实例?

时间:2011-07-15 21:34:59

标签: c# asp.net

以下一个不起作用:

        foreach (Control control in Controls) {
            if (control is DropDownList) {
                DropDownList list = control as DropDownList;
                ...
            }
        }

PS:我的课程延伸System.Web.UI.Page

4 个答案:

答案 0 :(得分:3)

Clean, robust solution可以轻松地重复用于任何类型的控件。它还具有向下钻取到层次结构中以查找嵌套在其他控件中的控件的好处。

答案 1 :(得分:2)

您只需要使用Form.Controls

替换Controls
foreach (Control c in Form.Controls)
{
  if (c is DropDownList)
  {
    // do something
  }
}

答案 2 :(得分:2)

或者你可以使用这个扩展名:

public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control
    {
        bool hit = startingPoint is T;
        if (hit)
        {
            yield return startingPoint as T;
        }
        foreach (var child in startingPoint.Controls.Cast<Control>())
        {
            foreach (var item in AllControls<T>(child))
            {
                yield return item;
            }
        }
    }

然后,您可以使用它来搜索特定控件中的任何类型的System.Web.UI.Control。如果是DropDownList,您可以使用它:

IEnumerable<DropDownList> allDropDowns = this.pnlContainer.AllControls<DropDownList>();
  • 这将在Panel控件中找到ID =“pnlContainer”的所有下拉列表。

答案 3 :(得分:0)

问题是某些DropDownList控件可能嵌套在其他控件中。

如果您的页面有一个面板,并且所有控件都在该面板中,则该页面的控件数组将只有该面板,并且所有控件都将位于Panel的控件数组中。

ajax81链接到的链接将运行良好。