Fazendo laços em WebControls

Um recurso de programação muito útil é a realização de laços através dos WebControls para a realização de tarefas repetitivas. Por exemplo, em um formulário de cadastramento, a passagem de cada TextBox para a coleção parameters de um Command poderia ser feita com um laço.

O problema é que os WebControls não podem ser facilmente localizados utilizando Me.Controls. Os WebControls de um WebForm encontram-se normalmente dentro do WebForm, que é por si só um control que encontra-se dentro da coleção Me.Controls

Então para podermos realizar este tipo de algorítimo devemos localizar o formulário e só então fazer laços com os controles contidos dentro do formulário. Podemos criar uma função que possa localizar e devolver o objeto formulário dentro da coleção Me.Controls. Veja como fica:

 

Function acharForm() As Web.UI.HtmlControls.HtmlForm

  Dim obj As Web.UI.Control

  For Each obj In Me.Controls

    If TypeOf obj Is Web.UI.HtmlControls.HtmlForm Then

      Return (obj)

    End If

  Next

End Function

 

Veja um exemplo de uso desta função para preencher o parameters de um command:

 

Private Sub cmdAtualizar_Click(ByVal sender As System.Object,

  ByVal e As System.EventArgs) Handles cmdAtualizar.Click

  Dim obj As Web.UI.Control

  Dim f As Web.UI.HtmlControls.HtmlForm

  f = acharForm()

  For Each obj In f.Controls

    If TypeOf obj Is System.Web.UI.WebControls.TextBox Then

      cmd.Parameters(obj.id)).Value = DirectCast(obj, TextBox).Text

    End If

  Next

  cn.Open()

  cmd.ExecuteNonQuery()

  cn.Close()

End Sub

 

Recursos como esses podem ser produzidos em classes base e as páginas podem herdar destas classes, como comentamos em outras dicas aqui no site