draw
draw

Reputation: 4846

how do you find all DropDownList instances in a page?

the following one doesn't work:

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

PS: My class extends System.Web.UI.Page

Upvotes: 1

Views: 3261

Answers (3)

Srdjan Donevski
Srdjan Donevski

Reputation: 71

Or you can use this extension:

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;
            }
        }
    }

Then you can use it for search of any type of System.Web.UI.Control within specific control. In case of DropDownList you can use it like:

IEnumerable<DropDownList> allDropDowns = this.pnlContainer.AllControls<DropDownList>();
  • this will find all drop downs within Panel control with ID="pnlContainer".

Upvotes: 2

joshb
joshb

Reputation: 5220

You just need to replace Controls with Form.Controls

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

Upvotes: 2

Nick Harrison
Nick Harrison

Reputation: 947

The problem is that some of the DropDownList controls may be nested in other controls.

If you page has a panel and all of your controls are in that panel the page's control array will only have that panel and all of the control will be in the Panel's control array.

The link that ajax81 linked to will work well.

Upvotes: 0

Related Questions