quinta-feira, 16 de setembro de 2010

Uma maneira fácil de limpar todos os campos de um formulário em C#

Olá pessoal,

Há tempos que pretendo criar um blog para postar sobre as coisas legais que eu li, discutir alguns temas interessantes (pelo menos pra mim hehehe), algumas soluções que me ajudaram no dia-a-dia de desenvolvimento e nunca tinha tempo. Agora esse tempo surgiu e criei o "Na Minha Máquina Funciona". Escolhi este nome porque é a frase mais dita no ambiente de programação e achei uma forma bem-humorada de escrever sobre o ambiente de TI.

Vou começar com uma solução simples que me sempre me ajuda . Nos nossos softwares, temos formulários com vários campos (TextBox, DropDownList, CheckBoxList, etc.) e sempre aparece aquele botão "Limpar" ou "Cancelar", em que cancela tudo que o usuário digitou.

Quando temos 2, 3 ou 4 campos na tela, é simples: basta olhar no aspx o nome do campo e retirar o que o usuário escreveu. E quando temos 20 campos na tela? E quando surgir um campo novo? O programador tem que lembrar de testar se esse último campo criado foi limpo.

Para evitar isso, tem um método simples que soluciona esse problema. Basta envolver os controles num Panel e chamar o método recursivo LimparControles(Control controlePai). Segue o código:
























Percebam que é um método muito simples.

Nas linhas 5-8, é verificado se o controle possui filhos - útil no caso de Panel, UpdatePanel, Table, etc. Se possuir, chama novamente o método.

Nas linhas 9-28, são testados os tipos dos controles. Caso seja TextBox, ele recebe string.Empty. Se for DropDownList, utiliza-se o método ClearSelection() e assim por diante. Se precisar de mais controles, basta incrementar o método.

Espero ter ajudado nesse primeiro artigo e pretendo escrever com freqüência agora.

8 comentários:

  1. Valeu Rafael,

    procurei em todo canto isso ai, só achei aqui, quebrou um galhão.

    disponibiliza o sistema completo desse exemplo pra nois, coloca um zip ai pra download.

    valeu

    ResponderExcluir
  2. E se os campos tiverem dentro de uma MasterPage?

    ResponderExcluir
  3. como chamar o metedo dentro de um botão?

    ResponderExcluir
  4. LimparControles(this);

    ResponderExcluir
  5. Dá pra fazer isso em uma masterpage de modo que limpe os controles da página filha?

    ResponderExcluir
  6. Dá pra fazer isso em uma masterpage de modo que limpe os controles da página filha?

    ResponderExcluir