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"); }