none
Exibir dados do rodapé da gridview ao exportar para Excel RRS feed

  • Pergunta

  • Pessoal,


    Já li que o conteúdo do footer deve ser Literal, já li para executar o dataBind antes do render, mas ao exportar minha grid para Excel, o texto do rodapé não aparece.


    Alguém me ajuda?

    Footer:

    protected void gvwRelatorio_DataBound(object sender, EventArgs e)
            {
    
                if(gvwRelatorio.FooterRow != null)
                {
                    Literal rodape = new Literal();
                    rodape.Text = string.Format("Total do periodo pesquisado: {0}", TotalArquivosGrid);
                    GridViewRow footer = gvwRelatorio.FooterRow;
                    footer.Cells[0].HorizontalAlign = HorizontalAlign.Center;
                    footer.Cells[0].Controls.Add(rodape);
                }
            }

    Exportação:

      protected void lkbExportar_Click(object sender, EventArgs e)
            {            
                // Ajusta largura para colunas no Excel
                double largura = gvwRelatorio.Width.Value;
                gvwRelatorio.Width = 500;
    
                gvwRelatorio.AllowPaging = false;
                gvwRelatorio.Columns[0].Visible = false;
                CarregarMultimedia();            
    
                StringWriter tw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(tw);
                System.Web.UI.HtmlControls.HtmlForm frm = new System.Web.UI.HtmlControls.HtmlForm();
    
                Response.Charset = "iso-8859-1";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding(28591);
                Response.HeaderEncoding = System.Text.Encoding.GetEncoding(28591);
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=relatorio.xls");
    
                EnableViewState = false;
    
                Controls.Add(frm);
                gvwRelatorio.DataBind();
                frm.Controls.Add(gvwRelatorio);
                frm.RenderControl(hw);
    
                Response.Write(tw.ToString());
                Response.End();
    
                gvwRelatorio.AllowPaging = true;            
                CarregarMultimedia();
                // Retorna à largura original
                gvwRelatorio.Width  = (Unit)largura;
            }

    terça-feira, 9 de outubro de 2012 18:01

Respostas

  • Desisti de exibir o rodapé no Excel e, no método de exportação, adicionei uma linha com o mesmo conteúdo do rodapé.

    Funcinou!

    gvwRelatorio.DataBind();
    
                int indiceUltimaLinha = gvwRelatorio.Rows.Count + 2;
    
                GridViewRow row = new GridViewRow(indiceUltimaLinha, -1, DataControlRowType.DataRow, DataControlRowState.Insert);
                TableCell cell = new TableCell();
                cell.ColumnSpan = 4;
                cell.HorizontalAlign = HorizontalAlign.Left;
    
                Label lblTotal = new Label();
                lblTotal.Text = string.Format("Total do periodo pesquisado: {0}", TotalArquivosGrid);
                cell.Controls.Add(lblTotal);
                row.Cells.Add(cell);
    
                gvwRelatorio.Controls[0].Controls.AddAt(indiceUltimaLinha, row);

    • Marcado como Resposta GeFidelis quinta-feira, 11 de outubro de 2012 20:42
    quinta-feira, 11 de outubro de 2012 20:41

Todas as Respostas

  • E ae tuco, blz cara?

    Eu fiz um teste aqui e deu certo, estou disponibilizando neste link, da uma olhada talvez você encontre alguma diferença:

    https://skydrive.live.com/?cid=dfff11068f1d6999&id=DFFF11068F1D6999%21197&Bsrc=Share&Bpub=SDX.SkyDrive

    Nome do arquivo: ExemploGrid_ExportarExcel


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCPD

    quarta-feira, 10 de outubro de 2012 12:09
  • Caramba, Janderson...


    Tentei de tudo, cara.. Tirando o fato de vc carregar com DataTable, todo o resto eu tentei fazer igual, mas não aparece o footer no Excel!


    Também não consigo que o próprio grid execute o render: grvUsuario.RenderControl(htmlWrite);

    O meu fica assim:

     Controls.Add(frm);
                CarregarMultimedia();
                gvwRelatorio.DataBind();
                frm.Controls.Add(gvwRelatorio);
                frm.RenderControl(hw);

    Mesmo com o grid runat="server", não rola...

    Valeu pela ajuda! Mas infelizmente não deu =/

    quarta-feira, 10 de outubro de 2012 23:07
  • Caramba cara, que droga, você ta usando qual controle, GridView mesmo?

    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCPD

    quinta-feira, 11 de outubro de 2012 11:43
  • <asp:GridView ID="gvwRelatorio" runat="server" EnableModelValidation="True" AutoGenerateColumns="False"
                    Width="940px" ShowFooter="True" EmptyDataText="Não existem registros para os critérios de filtro informados."
                    ForeColor="#333333" GridLines="None" OnPageIndexChanging="gvwRelatorio_PageIndexChanging"
                    PageSize="20" AllowPaging="True" OnRowDataBound="gvwRelatorio_DataBound">
                    <AlternatingRowStyle BackColor="White" />


    quinta-feira, 11 de outubro de 2012 18:12
  • Desisti de exibir o rodapé no Excel e, no método de exportação, adicionei uma linha com o mesmo conteúdo do rodapé.

    Funcinou!

    gvwRelatorio.DataBind();
    
                int indiceUltimaLinha = gvwRelatorio.Rows.Count + 2;
    
                GridViewRow row = new GridViewRow(indiceUltimaLinha, -1, DataControlRowType.DataRow, DataControlRowState.Insert);
                TableCell cell = new TableCell();
                cell.ColumnSpan = 4;
                cell.HorizontalAlign = HorizontalAlign.Left;
    
                Label lblTotal = new Label();
                lblTotal.Text = string.Format("Total do periodo pesquisado: {0}", TotalArquivosGrid);
                cell.Controls.Add(lblTotal);
                row.Cells.Add(cell);
    
                gvwRelatorio.Controls[0].Controls.AddAt(indiceUltimaLinha, row);

    • Marcado como Resposta GeFidelis quinta-feira, 11 de outubro de 2012 20:42
    quinta-feira, 11 de outubro de 2012 20:41