PUBLICIDADE
Este código tem nota
10

Autor

asilvestre

Alessandro Silvestre

membro deste fevereiro de 2009

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

Você gostou das mudanças no layout aqui do site?

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:
        <asp:Label                  ID="lblTitulo" runat="server" Text="Informe o número de campos: ">                  </asp:Label>&nbsp;&nbsp;
        <asp:TextBox                ID="txtCampos" runat="server" MaxLength="2"         Width="40">                     </asp:TextBox>&nbsp;
        <asp:RequiredFieldValidator ID="rfvCampos" runat="server" Text="(Obrigatório)"  ControlToValidate="txtCampos">  </asp:RequiredFieldValidator>&nbsp;&nbsp;
        <asp:Button                 ID="btOk"      runat="server" Text="Ok"             onclick="btOk_Click"            />

// -- 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)
        <asp:Table 
                ID="Table1" 
                runat="server" 
                GridLines="Vertical" 
                Font-Size="Medium" 
                ForeColor="#006699" 
                CellPadding="2" 
                CellSpacing="2">
        </asp:Table>
        <asp:Button 
            ID="btProcessa" 
            runat="server" 
            Text="Ordena" 
            onclick="btProcessa_Click" 
            ToolTip="Exibe os números em ordem crescente" />
        &nbsp;
        <asp:Button 
            ID="btVoltar" 
            runat="server" 
            onclick="btVoltar_Click" 
            Text="Voltar" 
            ToolTip="Volta a pagina inicial" />
// -- 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("<br>");

            }
        }
    }
    protected void btVoltar_Click(object sender, EventArgs e)
    {
        // Redireciono a execução para o inicio do aplicativo
        Response.Redirect("Default.aspx");
    }

ArquivoTipoTamanhoHits 
CamposDinamicos.zipArquivo ZIP5,3 Kb279Baixar o Arquivo
Sim   Não   Este código foi útil para você?
NotaComentário
10
tiger comentou em 6/8/2009

ultilisei

e consegui obrigado
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2009 R&W Informática Ltda. - Todos os direitos reservados.