Categorias

Como criar e ler campos dinâmicos com C#

Saudações a todos. Hoje vou demonstrar como criar/ler automaticamente campos em um formulário.

É um exemplo simples, porém de muita utilidade, pois demonstra perfeitamente como criar qualquer tipo de campo e resgatar os valores do mesmo sem muito esforço, também demonstro como gerar valores aleatórios para preencher os mesmos. Estou disponibilizando a solução completa, esta foi criada no VS2008 com Framework 3.5, porem pode ser utilizado em qualquer outra versão do VS.

* Talvez em outras versões do VS você não consiga abrir a solução mas o código em si funciona perfeitamente em qualquer versão.

Aplicação: Teremos nestas duas paginas DEFAULT.ASPX, esta tem a função de solicitar a quantidade de campos a ser criado e a página MOSTRACAMPOS.ASPX, esta como o próprio nome já diz exibe os campos do tipo TEXTBOX na tela solicitando dados numéricos e depois exibe os dados em ordem crescente.

// -- Default.ASPX
//   * Criar 4 controles:
                            
                              
            
        

// -- Default.ASPX.CS - Duplo click sobre o botao e incluir o código.
    protected void btOk_Click(object sender, EventArgs e)
    {
        Response.Redirect("MostraCampos.aspx?num=" + this.txtCampos.Text.ToString());
    }

// -- MostraCampos.ASPX
//   * Criar 3 controles ASPX ( 1-Tabela e 2 Botoes)
// Objeto table encontra-se na barra de ferramentas(standard)
        
        
        
         
        
// -- MostraCampos.ASPX.CS - Duplo click sobre o botao e incluir o código.

    protected void Page_Load(object sender, EventArgs e)
    {
    /****************************************************************
     * 
     * Procedimentos para CRIAR os campos dinamicos
     * 
     ****************************************************************/

    // Criando Variaveis
        // Representa uma linha da tabela
            TableRow Linha;
        // Representa uma celula da tabela
            TableCell Celula;
        // Representa um campo TextBox
            TextBox Campo;
        // Variavel para gerenciar contador
            int nCont = 0;        
        // Variavel que presenta a quantidade de campos a ser criado
            int nCampos = 0;      
        // Variavel que presenta numeros aleatório
            Random RandomClass = new Random();

        // Verificando se na URL existe o parametro "num"
        if(Request["num"] != null)
        {
            // Recebo o valor existe no parametro e o converto de STRING para INT
            // porque a variavel nCampos é do tipo INTEIRO

            nCampos = Convert.ToInt32(Request["num"].ToString());

            // Iniciando contador que vai criar os campos
            for (nCont = 0; nCont <= nCampos; nCont++)
            {
                // Criando nova linha, calula e campo
                Linha = new TableRow();
                Celula = new TableCell();
                Campo = new TextBox();
                // Setando propriedades do campo 
                // O nome do campo a ser criado é : sField_1, sField_2, sField_N...
                    Campo.ID = "sField_" + nCont.ToString(); 
                    Campo.Width = Unit.Pixel(40);
                // Alimentando o campo com valores inteiros de 0 a 999
                    Campo.Text = RandomClass.Next(0, 999).ToString();
                // Adiciono o campo criado e setado a celula
                Celula.Controls.Add(Campo);
                // Adiciono a celula com o campo a linha
                Linha.Cells.Add(Celula);
                // Adiciono a linha com a celula e com o campo setado a tabela
                this.Table1.Rows.Add(Linha);
            }
        }
        
    }
    protected void btProcessa_Click(object sender, EventArgs e)
    {
        /****************************************************************
        * 
        * Procedimentos para CRIAR os campos dinamicos
        * 
        ****************************************************************/
        // Variavel para gerenciar contador
        int nCont = 0;
        // Variavel que presenta a quantidade de campos a ser criado
        int nCampos = 0;
        // Verificando se na URL existe o parametro "num"
        if (Request["num"] != null)
        {
            // Recebo o valor existe no parametro e o converto de STRING para INT
            // porque a variavel nCampos é do tipo INTEIRO
            // Aqui adiciono mais um ao valor recebido pois este será o indice de um vetor
            // e vetores tem sua PRIMEIRA posição com o valor ZERO
            nCampos = Convert.ToInt32(Request["num"].ToString()) + 1;

            // Criando vetor que irá armazenar o conteudo dos campos para ordena-los de forma crescente
            int[] Vetor = new int[nCampos];

            // Iniciando contador que vai criar os campos
            for (nCont = 0; nCont <= nCampos; nCont++)
            {
                // Crio uma variavel do tipo TEXTBOX e procuro na tabela TABLE1 o campo: sField_1, sField_2, sField_N
                // e ao encontrar o campo retorno também um TEXTBOX
                TextBox text = this.Table1.FindControl("sField_" + nCont.ToString()) as TextBox;
                
                // Verifico se o conteudo do campo é null caso contrario alimento uma posição do vetor
                // com uma informação do tipo INTEIRO
                if (text != null)
                {
                    Vetor[nCont] = Convert.ToInt32(text.Text);
                }
            }

            // Uma vez TODOS os campos lidos e seus valores armazenados no vetor, utilizo o metodo ARRAY.SORT
            // para ler, ordenar e devolver um vetor classificado. Aqui temos um exemplo de parametro passado
            // por referencia.
            Array.Sort(Vetor);
            nCampos = Convert.ToInt32(Request["num"].ToString());
            for (nCont = 0; nCont <= nCampos-1; nCont++)
            {
                    Response.Write(Vetor[nCont]);
                    Response.Write("
"); } } } protected void btVoltar_Click(object sender, EventArgs e) { // Redireciono a execução para o inicio do aplicativo Response.Redirect("Default.aspx"); }

Arquivos para Download:

CamposDinamicos.zip