none
Obter valor de TextBox no Footer do Gridview RRS feed

  • Discussão Geral

  • Olá pessoal!

    Estou tentando criar no footer do meu gridview uma opção para inserção de dados.

    Então fiz desta forma:

    protected void gvSolucProp_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.Footer)
                {                                
                    TextBox txtNewDescSol = new TextBox();
                    txtNewDescSol.ID = "txtNewDescSol";
                    e.Row.Cells[3].Controls.Add(txtNewDescSol);

                    TextBox txtNewData = new TextBox();
                    txtNewData.ID = "txtNewData";
                    e.Row.Cells[4].Controls.Add(txtNewData);

                    CalendarExtender ceData = new CalendarExtender();
                    ceData.TargetControlID = txtNewData.ID;
                    ceData.OnClientDateSelectionChanged = "verificaData";
                    ceData.Animated = true;
                    ceData.Format = "d";
                    e.Row.Cells[4].Controls.Add(ceData);

                    DropDownList ddlNewStatus = new DropDownList();
                    ddlNewStatus.ID = "ddlNewStatus";
                    ddlNewStatus.Items.Add("Não concluído");
                    ddlNewStatus.Items[0].Value = "0";
                    ddlNewStatus.Items.Add("Concluído");
                    ddlNewStatus.Items[0].Value = "1";
                    e.Row.Cells[5].Controls.Add(ddlNewStatus);               
                }
            }  

    Também coloquei um TemplateField e inseri em seu FooterTemplate dois botões (Salvar e Cancelar) com commandname Salvar e Cancelar .

    O layout do grid aparece perfeitamente, porém ao clicar no botão salvar não consigo obter os valores do textbox no footer.

    Estou tentando obter os valores do text box no evento rowcommand:

    GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);

    TextBox txt = row.FindControl("txtNewData") as TextBox;

    quando faço isso o textbox fica nulo.

    Tentei também este trecho e não deu certo:

    TextBox txt = gvSolucProp.FooterRow.FindControl("txtNewData") as TextBox;
    string teste = txt.Text;

    Desde já agradeço a ajuda.

    • Tipo Alterado Giovani Cr segunda-feira, 23 de dezembro de 2013 13:52
    quinta-feira, 12 de dezembro de 2013 17:17

Todas as Respostas

  • Olá Júnior

    Aparentemente o meu evento RowDataBound está correto, ele gera os campos no footer do grid do jeito que preciso:

    O que não está funcionando é que ao clicar em salvar não consigo pegar o valor digitado no text box para salvar no banco de dados.

    Estou tentando obter estes dados no evento rowcommand.

    Atenciosamente.

    quinta-feira, 12 de dezembro de 2013 18:08
  • Vc colocou os itens do footer como templatefield ? 

    Pegue os valores no rowdatabound


    Junior

    quinta-feira, 12 de dezembro de 2013 18:31
  • Não, os itens do footer eu crio no rowdatabound desta forma:

    protected void gvSolucProp_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.Footer)
                {                                
                    TextBox txtNewDescSol = new TextBox();
                    txtNewDescSol.ID = "txtNewDescSol";
                    e.Row.Cells[3].Controls.Add(txtNewDescSol);

                    TextBox txtNewData = new TextBox();
                    txtNewData.ID = "txtNewData";
                    e.Row.Cells[4].Controls.Add(txtNewData);

                    CalendarExtender ceData = new CalendarExtender();
                    ceData.TargetControlID = txtNewData.ID;
                    ceData.OnClientDateSelectionChanged = "verificaData";
                    ceData.Animated = true;
                    ceData.Format = "d";
                    e.Row.Cells[4].Controls.Add(ceData);

                    DropDownList ddlNewStatus = new DropDownList();
                    ddlNewStatus.ID = "ddlNewStatus";
                    ddlNewStatus.Items.Add("Não concluído");
                    ddlNewStatus.Items[0].Value = "0";
                    ddlNewStatus.Items.Add("Concluído");
                    ddlNewStatus.Items[0].Value = "1";
                    e.Row.Cells[5].Controls.Add(ddlNewStatus);               
                }

    quinta-feira, 12 de dezembro de 2013 19:26
  • Pelo o que eu entendi neste link ele está buscando os campos do footer no evento rowdatabound.

    Eu preciso busca-los no evento rowcommand.

    quinta-feira, 12 de dezembro de 2013 20:06
  • Acredito que não estou sendo claro. 

    Eu crio os controles no rowdatabound e preciso busca seus valores no evento rowcommand.

    sexta-feira, 13 de dezembro de 2013 16:11