Loop through all the user controls on a page

Want to loop through all the user controls that exist on the page and get their IDs. How do I do it?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

To get each User Control, you’d have to test the Type of the control:

EDIT: I modified my example to go through all controls recursively:

Method

public void GetUserControls(ControlCollection controls)
{
    foreach (Control ctl in controls)
    {
        if (ctl is UserControl)
        {
            // Do whatever.
        }

        if (ctl.Controls.Count > 0)
            GetUserControls(ctl.Controls);
    }
}

Called
GetUserControls(Page.Controls);

Method 2

This should work:

var listOfUserControls = GetUserControls(Page);

...

public List<UserControl> GetUserControls(Control ctrl)
{
  var uCtrls = new List<UserControl>();
  foreach (Control child in ctrl.Controls) {
    if (child is UserControl) uCtrls.Add((UserControl)child);
    uCtrls.AddRange(GetUserControls(child);
  }

  return uCtrls;
}

Method 3

foreach(Control control: Page.Controls)
{

    //do something with control object

}

Method 4

I created an extension method to do this, which works really nicely with LINQ.

<Extension()>
Public Function DecendentControls(ParentControl As Control) As Control()
    Dim controls As New List(Of Control)

    For Each myControl As Control In ParentControl.Controls
        controls.Add(myControl)
        controls.AddRange(myControl.DecendentControls)
    Next

    Return controls.ToArray
End Function

Then with LINQ you can do something like this to set all the checkboxes on a page to unchecked:
For Each myControl As CheckBox In pnlMain.DecendentControls.Where(Function(x) TypeOf x Is CheckBox)
    myControl.Checked = False
Next


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x