Hola de nuevo
Al regresar el sitio de la Célula de la UNICAUCA, regreso también para contribuir con algunas entradas que espero sean de su interés.
Alguna ves les ha interesado exportar un datagrid (dicese del prehistórico control hoy mejor llamado GridView) a Excel? Les cuento que me toco alguna ves y es tarea nada díficil, además de ser muy útil ya que los datos en un datagrid no le sirven de mucho a nuestros usuarios, quienes finalmente son los que piden que puedan transportarlos a excel para poder hacer operaciones y todo lo que ya sabemos se puede hacer con la data en Excel. Digamos, manipular?
Pongamos manos a la obra:
1. Creamos un proyecto de tipo ASP.NET donde quieran, VS.NET 2003, VS.NET 2005 o VS.NET 2008 Beta
2. Arrastren un Datagrid o GridView a su página web, y coloquen un botón que diga algo así como, Exportar a Excel.
3. Supongamos que tenemos SQL Server 2000 o 2005 y la archi conocida Northwind a la mano y consultemos cualquier información de alguna de sus tablas. El siguiente código coloquenlo en el Load de la página o dende sus manitas creativas se les antoje!!
if (!Page.IsPostBack)
{
SqlConnection miConexion = new SqlConnection("server=orion;database=northwind;trusted_connection=true");
SqlDataAdapter miAdaptador = new SqlDataAdapter("SELECT * FROM PRODUCTS",miConexion);
DataSet miDs = new DataSet();
miAdaptador.Fill(miDs);
Session["Datos"] = miDs.Tables[0];GridView1.DataSource = Session["Datos"] as DataTable;
GridView1.DataBind();
}
Si si ya se, donde está mi separación de capas, ya me parezco algunos libros, pero la excusa es que: es un simple jemplo y no quiero mostrar ahora otras cosas, así que todo el código queda en el codebehind de la página. Pero recuerden, esto no se debe hacer, y estoy señalando con el dedo. Si si ya se, meter toda esa data en Sesion, no me culpen, es solo un ejemplo. Recuerden meter tanta información en las variables de sesion paga un alto costo en los recursos del servidor, así que se debe tener mucho cuidado. O por lo menos remover la variable cuando ya no la vayan a utilizar, por ejemplo: Session.Remove()...
4. Hagase la luz!! , ahora a exportar toda esa información listada en el control. Pero antes referencien algunos espacios de nombre (Name Spaces), antes de que el compilador grite desesperado:
using System.Data.SqlClient;
using System.IO;
using System.Text;
En el handler del evento Click del botón coloquen:
StringWriter miStringWrite = null;
HtmlTextWriter miHtmlWrite = null;
try
{
if (this.GridView1.Rows.Count > 0 && Session["Datos"] != null)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.ContentType = "application/vnd.xls";
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.Default;
miStringWrite = new StringWriter();
miHtmlWrite = new HtmlTextWriter(miStringWrite);
this.GridView1.EnableViewState = false;
this.GridView1.AllowPaging = false;
this.GridView1.DataSource = (DataSet)Session["Datos"];
this.GridView1.DataBind();
this.GridView1.CssClass = "";this.GridView1.RenderControl(miHtmlWrite);
Response.Write(miStringWrite.ToString());
Response.End();
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
miStringWrite.Flush();
miHtmlWrite.Flush();
miStringWrite.Close();
miHtmlWrite.Close();
}
Ah y recuerden, para el Datrgid tenmos la propiedad Items, en cambio para el nuevo engendro llamado GridView tenemos Rows, ay que cosas!!
Si no me creen preguntenle al compilador en la línea:
if (this.GridView1.Rows.Count > 0 && Session["Datos"] != null)
Y con esto señores solo me resta decirles... Feliz exportación!! y la importación??
Att. Andres Ortiz