Recorrer todos los controles de una página ASP.NET

Buscando la manera de encontrar una serie de Gridview en una página es que llegué a crear esta función. Que es básicamente recorrer los controles de manera recursiva porque un control puede contener a otros controles en su interior. En mi caso era solamente ocultar el FooterRow de las Grillas (Gridview) y tengo en cuenta que cuando la grilla no tiene rows la oculto directamente.

El código en VB:

        For Each ctrl As Control In Page.Controls
          Dim gv As GridView = TryCast(ctrl, GridView)
          If gv Is Nothing Then
               RecorrerColeccion(ctrl)
          Else
              If gv.Rows.Count > 0 Then
                 gv.FooterRow.Visible = False
               Else
                 gv.Visible = False
              End If
          End If
       Next

Acá esta la función recursiva RecorrerColeccion:

Sub RecorrerColeccion(ByVal parentCtrl As Control)
          For Each pctrl As Control In parentCtrl.Controls
              Dim gv As GridView = TryCast(pctrl, GridView)
              If gv Is Nothing Then
                  RecorrerColeccion(pctrl)
              Else
                  If gv.Rows.Count > 0 Then
                      gv.FooterRow.Visible = False
                  Else
                      gv.Visible = False
                  End If
              End If
          Next
      End Sub

Y acá esta el mismo ejemplo en C#:

 foreach (Control ctrl in Page.Controls) {
      GridView gv = ctrl as GridView;
      if (gv == null) {
          RecorrerColeccion(ctrl);
      } else {
          if (gv.Rows.Count > 0) {
              gv.FooterRow.Visible = false;
         } else {
              gv.Visible = false;
          }
      }
  }
   
  public void RecorrerColeccion(Control parentCtrl)
  {
      foreach (Control pctrl in parentCtrl.Controls) {
          GridView gv = pctrl as GridView;
          if (gv == null) {
              RecorrerColeccion(pctrl);
          } else {
              if (gv.Rows.Count > 0) {
                  gv.FooterRow.Visible = false;
              } else {
                  gv.Visible = false;
              }
          }
      }
  }

Espero que les resuelva el problema como a mi.

Saludos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s