none
Inserir dados obtidos através de campos gerados dinamicamente RRS feed

  • Pergunta

  • Bom dia,

    Estou voltando a programar e apareceu uma dúvida seguida de um erro.

    Estou gerando diversos campos dinâmicos, serão 12 textboxes para valores, 12 para datas e 12 dropdownlists para forma de pagamento. Até ai tudo bem, gero e preencho os campos sem problemas. No momento em que vou inserir os dados no banco acontecem os seguinte erros:

    1. A rotina só insere 6 registros. Sendo que o dropdown foi setado para 12;
    2. Os campos que foram gerados dinamicamente não passam os valores
    int qtd = int.Parse(drpParcelas.SelectedItem.Value);
                        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;
                            txt.Text = String.Format("{0:0.0,0}", decParcela);
    
                            MySqlDataReader tbFormaPagamento = apoliceDB.Select("SELECT FORMAPAGAMENTO_ID, FORMAPAGAMENTO_DSC_NOME from formapagamento");
    
                            DropDownList drpTipoPagamento = new DropDownList();
    
                            drpTipoPagamento.ID = "drpTipoPagamento" + i.ToString();
                            drpTipoPagamento.DataSource = tbFormaPagamento;
                            drpTipoPagamento.DataValueField = "FORMAPAGAMENTO_ID";
                            drpTipoPagamento.DataTextField = "FORMAPAGAMENTO_DSC_NOME";
                            drpTipoPagamento.DataBind();
    
                            Sigs.BLL.ConnDbMySQL.CloseDbConn();
    
    
                            switch (i)
                            {
                                case 1:
                                    resposta = hoje.AddDays(5);
                                    break;
                                case 2:
                                    resposta = hoje.AddDays(35);
                                    SomaData = 30;
                                    break;
                                default:
                                    resposta = resposta.AddDays(SomaData);
                                    break;
                            }
    
                            TextBox txtData = new TextBox();
                            txtData.ID = "txtData" + i.ToString();
                            txtData.Columns = 30;
                            txtData.Text = String.Format("{0:d}", resposta);
    
                            //Adicionando os controles a um container, no caso, um Panel
                            Panel1.Controls.Add(lbl);
                            Panel1.Controls.Add(txt);
                            Panel1.Controls.Add(drpTipoPagamento);
                            Panel1.Controls.Add(txtData);
                        }

    Código que insere os dados

                    for (int ix = 1; ix <= int.Parse(drpParcelas.SelectedItem.Value); ix++)
                    {
                        Boolean insertFinanceiroParcela = apoliceDB.Insert("INSERT into financeiroapolicefaturamento (FINANCEIROAPOLICEFATURAMENTO_DSC_NUMEROAPOLICE, FINANCEIROAPOLICEFATURAMENTO_DAT_VENCIMENTO, FINANCEIROAPOLICEFATURAMENTO_NUM_PARCELA, FINANCEIROAPOLICEFATURAMENTO_DEC_VALOR, FINANCEIROAPOLICE_ID, FORMAPAGAMENTO_ID) values ('" + txtApolice.Text + "', '" + txtData + ix.ToString() +".Text"+ "', '" + ix + "', '" + txt + ix.ToString() + ".Text"+"', '" + financeiroApolice + "', '" + drpTipoPagamento + ix.ToString() + ".SelectedItem.Value" + "')");
                        
    
                        BLL.ConnDbMySQL.CloseDbConn();
                    }  



    sexta-feira, 24 de janeiro de 2014 11:03

Respostas

  • Vc deve fazer o Cast para o tipo de seu controle para ler o valor correto tipo isso :

    //para textbox 
    TextBox txt = (TextBox)this.FindControl("Textbox"+ix.ToString());
    
    //agora na variavel txt vc encontra o valor de seu txt
    string texto = txt.Text;

    Agora com relação do seu loop inserir somente 6 linhas tem que ver o valor que gera no dropdpwn drpParcelas deve estar com valor 5...

    Eu faria essa query com parametros...


    • Editado Daniel Brito br sexta-feira, 24 de janeiro de 2014 11:18
    • Marcado como Resposta Ramon Santos terça-feira, 28 de janeiro de 2014 20:09
    sexta-feira, 24 de janeiro de 2014 11:15