Como criar controles ASP.NET em tempo de execução

Criando server controls em tempo de execuçãoOlá pessoal, tudo bom?

Neste post demonstro como criar controles (Server Controls) ASP.NET em tempo de execução. Tal técnica pode ser muito importante quando sabemos ao certo quais e quantos serão os controles ASP.NET que precisaremos em nosso formulário.

Arquivo: ServerControlsTempoExecucao.aspx


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ServerControlsTempoExecucao.aspx.cs" Inherits="Especializacao2011_2012.ServerControlsTempoExecucao" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   <title>Criando controles ASP.NET em tempo de execução</title>
</head>
<body>
   <form id="form1" runat="server">
   <div>
      <h2>Criando controles ASP.NET em tempo de execução</h2>
      Selecione quantas caixas de texto você precisa:<br />
      <asp:RadioButtonList ID="rblQuantidade" runat="server" AutoPostBack="True" RepeatDirection="Horizontal">
         <asp:ListItem>1</asp:ListItem>
         <asp:ListItem>2</asp:ListItem>
         <asp:ListItem>3</asp:ListItem>
      </asp:RadioButtonList>
      <asp:Panel ID="pnlControles" runat="server" GroupingText="Server Controls criados em tempo de execução">
      </asp:Panel>
   </div>
   <asp:Button ID="btnEnviar" runat="server" onclick="btnEnviar_Click" Text="Enviar" /><br />
   <asp:Label ID="lblValores" runat="server"></asp:Label>
</form>
</body>
</html>

Arquivo: ServerControlsTempoExecucao.aspx.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Especializacao2011_2012
{
   public partial class ServerControlsTempoExecucao : System.Web.UI.Page
   {
      //No ciclo de vida de uma página ASP.NET este é o primeiro método que pode ser manipulado, por isso, a criação dos controles está sendo realizada nele.
      //Repare que tivemos que utilizar o Request.Form para conseguir obter o valor do RadioButtonList, que neste momento, ainda não é objeto para o ASP.NET e por isso seu valor está apenas nos parametros do método POST
      protected void Page_PreInit(object sender, EventArgs e)
      {
         if (!string.IsNullOrEmpty(Request.Form["rblQuantidade"]))
         {
            int qtd = int.Parse(Request.Form["rblQuantidade"]);
            for (int i = 1; i <= qtd; i++)
            {
               //Criando os controles
               Label lbl = new Label();
               lbl.ID = "lbl" + i.ToString();
               lbl.Text = string.Format("<br/>Informe o valor {0} <br/>", i.ToString());

               TextBox txt = new TextBox();
               txt.ID = "txt" + i.ToString();
               txt.Columns = 30;

               //Adicionando os controles a um container, no caso, um Panel
               pnlControles.Controls.Add(lbl);
               pnlControles.Controls.Add(txt);
            }
         }
      }

      protected void Page_Load(object sender, EventArgs e)
      {
      }

      //Como obter os valores informados nos controles criados em tempo de execução (exemplo)
      protected void btnEnviar_Click(object sender, EventArgs e)
      {
         lblValores.Text = string.Empty;
         //Obtendo todos os controles que estão dentro do Panel
         foreach (Control ctl in pnlControles.Controls)
         {
            //Verificando se o controle é da classe TextBox (há outras formas)
            if (ctl.GetType().ToString() == "System.Web.UI.WebControls.TextBox")
               lblValores.Text += ((TextBox)ctl).Text + "<br/>";
         }
      }
   }
}

Um grande abraço a todos,
Eduardo Henrique Rizo

Anúncios

Coordenador de Internet da Universidade do Oeste Paulista (Unoeste) e professor universitário de disciplinas relacionadas ao desenvolvimento de sistemas para Web, gerenciamento de servidores, serviços e redes.

Marcado com: , , ,
Publicado em ASP.NET, Desenvolvimento Web, Microsoft
6 comentários em “Como criar controles ASP.NET em tempo de execução
  1. Cláudio disse:

    Cara… Te amo!!

    Fiquei horas procurando exatamente isso!

    Já estava desistindo.

  2. Atila disse:

    tbm te amo cara, salvo minha pele para fazer um controle de estoque

  3. Atila disse:

    Eduardo boa Noite

    estou precisando de ajuda urgentimente.

    Tenho um controle chamado estoque que recebe um cookie com o ID do produto cadastrado, e ao fazer isso ele resgata os dados dos tamanho referente ao produto e gera com controles necessarios tem runtime como mostra o codigo abaixo

    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    HttpCookie cookie = Request.Cookies[“IDProduto”];
    if (cookie != null)
    {
    List clsTamanhoProduto = TamanhoProdutoBLL.GetTamanhoProdutoByIDProduto(int.Parse(cookie.Value.ToString()));
    clsTamanhoProduto.ForEach(delegate(TamanhoProdutoTO _clsTamanhoProduto)
    {
    TamanhoTO clsTamanho = new TamanhoTO();
    clsTamanho = TamanhoBLL.GetTamanhoByID(_clsTamanhoProduto.IDTamanho);

    // Montando os Label e TextBox
    Label lbl = new Label();
    lbl.ID = “lblTamanho” + clsTamanho.Tamanho;
    lbl.Text = “Tamanho :” + clsTamanho.Tamanho;

    TextBox txt = new TextBox();
    txt.ID = “txtTamanho” + clsTamanho.Tamanho;
    txt.SkinID = “TextBoxPequeno”;
    pnlControles.Controls.Add(lbl);
    pnlControles.Controls.Add(txt);
    });
    }
    }
    }
    porem quando vou salvar ele não esta encontrando os itens que tem nesse panel, ele somente mostra que tem 1 literal sendo que eu não defini literal em lugar nenhum.

    Segue o código do salvar

    protected void Button1_Click(object sender, EventArgs e)
    {
    MembershipUser User = Membership.GetUser();
    HttpCookie cookie = Request.Cookies[“IDProduto”];
    EstoqueTO clsEstoque = new EstoqueTO();
    clsEstoque.IDProduto = int.Parse(cookie.Value);
    clsEstoque.IDUsuario = (Guid)User.ProviderUserKey;
    List clsTamanhoProduto = TamanhoProdutoBLL.GetTamanhoProdutoByIDProduto(int.Parse(cookie.Value.ToString()));
    //Obtendo todos os controles que estão dentro do Panel
    foreach (Control control in pnlControles.Controls)
    {

    //Verificando se o controle é da classe TextBox (há outras formas)
    if (control is TextBox)
    {
    clsTamanhoProduto.ForEach(delegate(TamanhoProdutoTO _clsTamanhoProduto)
    {
    clsEstoque.Quantidade = int.Parse(((TextBox)control).Text);
    clsEstoque.IDTamanho = _clsTamanhoProduto.IDTamanho;

    EstoqueBLL.Insert(clsEstoque);
    });
    }

    }

    }

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Erro: o Twitter não respondeu. Por favor, aguarde alguns minutos e atualize esta página.

Sorocaba e Região
Prestadora de serviços RIZZO GS - Sorocaba/SP

Serviços de limpeza, conservação, recepção, copa, portaria, vigia, zeladoria, jardim, elétrica, hidráulica, pintura, etc.

Contato: (15) 3357-4263 / (15) 3357-4502 - contato@rizzogs.com.br

Website: http://www.rizzogs.com.br

%d blogueiros gostam disto: