none
Exportar GridView para Excel - ASP NET - Web Form RRS feed

  • Pergunta

  • Olá Pessoal estou tendo uma ceta dificultade para exportar o Grid para uma arquivo excel.

    Segue o Passo a passo:

    Meu gried view - gdv_Teste

    <asp:GridView ID="gdv_Teste" runat="server" AllowPaging="True"
    AutoGenerateColumns="False" DataSourceID="SqlDataSource2"
    ForeColor="#333333" GridLines="None" Height="499px" PageSize="20"
    style="text-align: center; margin- margin-
    onpageindexchanging="GridView1_PageIndexChanging">

    e  meu SqlDataSource que está confirgurado perfeitamente.

    Criei um Botão para exportar estes dados, no evendo click configurei a exportação do grid.

    protected void btn_Pesquisar_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            using (StringWriter sw = new StringWriter())
            {
                HtmlTextWriter hw = new HtmlTextWriter(sw);

                //To Export all pages
                gdv_Teste.AllowPaging = false;
                gdv_Teste.DataBind();

                gdv_Teste.HeaderRow.BackColor = Color.White;
                foreach (TableCell cell in gdv_Teste.HeaderRow.Cells)
                {
                    cell.BackColor = gdv_Teste.HeaderStyle.BackColor;
                }
                foreach (GridViewRow row in gdv_Teste.Rows)
                {
                    row.BackColor = Color.White;
                    foreach (TableCell cell in row.Cells)
                    {
                        if (row.RowIndex % 2 == 0)
                        {
                            cell.BackColor = gdv_Teste.AlternatingRowStyle.BackColor;
                        }
                        else
                        {
                            cell.BackColor =gdv_Teste.RowStyle.BackColor;
                        }
                        cell.CssClass = "textmode";
                    }
                }

                gdv_Teste.RenderControl(hw);

                //style to format numbers to string
                string style = @"<style> .textmode { mso-number-format:\@; } </style>";
                Response.Write(style);
                Response.Output.Write(sw.ToString());
                Response.Flush();
                Response.End();
            }
        }

        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {

            gdv_Teste.PageIndex = e.NewPageIndex;
            this.DataBind();

            }

    Porem ao executar o mesmo apresenta erro no cmando -   gdv_Teste.RenderControl(hw);

    Msg: Controle 'ctl00_ContentPlaceHolder1_gdv_Teste' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.

    Pesquisei algo sobre o erro, porem não tive sucesso. Alguém sabe se faltou algo? rs

    Abs.


    Leandro Lima.

    sexta-feira, 22 de agosto de 2014 15:04

Todas as Respostas