Criando controles dinamicamente

<< Click to Display Table of Contents >>

Navigation:  ASP.NET > ASP Controls >

Criando controles dinamicamente

Previous pageReturn to chapter overviewNext page

Definição

 

Uma página tem um TextBox. Coloque um número, exemplo: 8.

Ao pressionar o botão Enviar será aberta uma segunda página criando dinamicamente 8 TextBox dentro de uma Table.

Ali nesta segunda página tem outro botão Ordenar. Clique para acessar e ordernar o conteúdo das TextBox dinâmicas usando array.

 

Default.aspx

 

      <asp:Label ID="Label1" runat="server" Text="Informa quantos campos"></asp:Label>

      <br />

      <asp:TextBox ID="txtCampos" runat="server"></asp:TextBox>

      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtCampos"

          ErrorMessage="Obrigatório">Obrigatório</asp:RequiredFieldValidator>

      <br />

      <asp:Button ID="btnEnviar" runat="server" Text="Enviar" />

 

Default.aspx.cs

 

using System;

 

public partial class _Default : System.Web.UI.Page

{

  protected void Page_Load(object sender, EventArgs e)

   {

   }

 

  protected void btnEnviar_Click(object sender, EventArgs e)

   {

       Response.Redirect("Exibir.aspx?num=" + txtCampos.Text);

   }

}

 

Exibir.aspx

 

      <asp:Table ID="Table1" runat="server" CellPadding="2" CellSpacing="2" Font-Names="Arial" GridLines="Vertical"></asp:Table>

      <br />

      <asp:Button ID="btnOrdenar" runat="server" OnClick="btnOrdenar_Click" Text="Ordenar" ToolTip="Exibir os numeros em ordem crescente" />

      <br />

      <asp:Button ID="btnVoltar" runat="server" OnClick="btnVoltar_Click" Text="Voltar" />

 

Exibir.aspx.cs

 

using System;

using System.Web.UI.WebControls;

 

public partial class Exibir : System.Web.UI.Page

{

 

  private string PREFIXO = "meuCampo_";

 

  protected void Page_Load(object sender, EventArgs e)

   {

      // não tem query string, cai fora

      if (Request.QueryString["num"] == null)

          return;

 

      // componentes usados para adicionar o componente na tela (table)

      TableRow linha;

      TableCell celula;

      TextBox campo;

      Random random = new Random();

      int contCampos = int.Parse(Request.QueryString["num"].ToString());

 

      // cria X campos conforme usuário informou no default.aspx

      for (int cont = 0; cont < contCampos; cont++)

       {

           linha = new TableRow();

           celula = new TableCell();

 

          // cria o textBox

           campo = new TextBox();

           campo.ID = PREFIXO + cont.ToString();

           campo.Width = Unit.Pixel(40); // 40 pixels

           campo.Text = random.Next(0, 9999).ToString();

 

          // joga em componentes

           celula.Controls.Add(campo);

           linha.Cells.Add(celula);

 

          // joga pra página

          this.Table1.Rows.Add(linha);

       }

   }

 

  protected void btnVoltar_Click(object sender, EventArgs e)

   {

       Response.Redirect("Default.aspx");

   }

 

  protected void btnOrdenar_Click(object sender, EventArgs e)

   {

      // nao tem query cai fora

      if (Request.QueryString["num"] == null)

          return;

 

      int contCampos = int.Parse(Request.QueryString["num"].ToString());

      int[] vetor = new int[contCampos];

 

      // percorre os campos na tela

      for (int cont = 0; cont < contCampos; cont++)

       {

          // usa o findcontrol para achar nossos textBox

          TextBox txt = (TextBox)this.Table1.FindControl(PREFIXO + cont.ToString());

          if (txt != null)

           {

              // joga o text deles num vetor

               vetor[cont] = int.Parse(txt.Text);

           }

       }

 

      // ordena o vetor

      Array.Sort(vetor);

       

      // joga no response o vetor ordenado

      foreach (int cont in vetor)

       {

           Response.Write(cont);

           Response.Write("<br>");

       }

   }

}