AnswerBun.com

Exportar a Excel en ASP.NET

Stack Overflow en español Asked by CarlosR93 on December 21, 2020

Quisiera saber como exportar de Asp.net un DataGrid a Excel (si saben de alguna otra forma favor de explicarla), me sale un error, esta comentado en la linea donde aparece:

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
        Response.ContentType = "application/ms-excel ";
        StringWriter sw = new StringWriter()
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        GridView1.AllowPaging = false;
        GridView1.DataBind();
        GridView1.RenderControl(hw);;// <-- Aqui me sale el error:RegisterForEventValidation can only be called during Render();
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();

    }
      public override void VerifyRenderingInServerForm(Control control)
    {

    }

2 Answers

Si el control GridView no tiene controles AJAX como padre esto debería funcionar:

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=ArchivoExportado.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";

StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);

GridView1.HeaderRow.Style.Add("background-color", "#F0F0F0");

foreach (TableCell tableCell in GridView1.HeaderRow.Cells)
{
    tableCell.Style["background-color"] = "#ffffff";
}

foreach (GridViewRow gridviewrow in GridView1.Rows)
{
    gridviewrow.BackColor = System.Drawing.Color.White;
    foreach (TableCell gridviewrowtablecell in gridviewrow.Cells)
    {
        gridviewrowtablecell.Style["background-color"] = "#ffffff";
    }
}

GridView1.RenderControl(htw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

Si la grilla está dentro de controles AJAX:

  • Colocar el botón o enlace que realiza la exportación fuera del control UpdatePanel.
  • Agrega al UpdatePanel el trigger PostBackTrigger que apunte al botón que realiza la exportación.
  • Se debe llamar al método ScriptManager.RegisterPostBackControl() pasando como parámetro el botón de exportación.
  • De última, puedes hacer otra página .aspx que realice la exportación sin utilizar UpdatePanel.

Espero resulte útil.

Answered by Christian Amado on December 21, 2020

Este es un código para exportar un gridview muy similar que me funciona:

introducir la descripción de la imagen aquí

Este es el resultado: introducir la descripción de la imagen aquí

Así se implementa introducir la descripción de la imagen aquí

Código C#

introducir la descripción de la imagen aquí

 protected void ExportToExcel()
        {
            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);

                GridView1.AllowPaging = true;

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

                GridView1.RenderControl(hw);

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

        public override void VerifyRenderingInServerForm(Control control)
        {
            /* Verifies that the control is rendered */
        }

Answered by user22970 on December 21, 2020

Add your own answers!

Related Questions

Como puedo poner IF en jsx

1  Asked on December 12, 2020 by matist00

   

Macro con excel para sumar valores repetidos

0  Asked on December 12, 2020 by yeye727

     

Error al tratar de comparar dos count en sqlite

2  Asked on December 11, 2020 by andres

 

Hola, Quiseira sacar una tabla de regresión en R y Stata

1  Asked on December 11, 2020 by nicolas

     

Cálculos con duraciones de tiempo

1  Asked on December 10, 2020 by kintela

   

Tuplas a DataFrame (pandas)

3  Asked on December 9, 2020 by fioreitor

     

spread y nombre de filas y columnas

1  Asked on December 9, 2020 by iav

 

Como hago un botón que descargue un archivo?

0  Asked on December 9, 2020 by camilkdelevingn

   

¿Cómo almacenar muchas imágenes en la base de datos de firebase?

1  Asked on December 8, 2020 by alan-ortega

     

problema al llamar el método de php desde angular

2  Asked on December 8, 2020 by jossy

 

Collectstatic error mientras desplegaba Django app a Heroku

0  Asked on December 8, 2020 by fernando-lopez

       

calculadora solar añadir api pvgis

0  Asked on December 8, 2020 by juan-javier-escobar-rubio

         

ver si ya existe relacion OnetoOne en Django

1  Asked on December 7, 2020 by natogua

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP