Cómo enviar los resultados de un control Web a una cadena

Típica situación: tengo un GridView con datos y quiero guardarlos en un archivo HTML (o más bien enviárselos al usuario como un archivo .htm) o enviarlos por correo.


El control está dentro de una página con otros controles que están más o menos relacionados con éste, por ejemplo para pasarle parámetros y filtrar.


Lo típico que hace todo el mundo es pasar los mismos parámetros a otra página, lanzar la misma consulta a la base de datos y luego generar el HTML con un StringBuilder (con suerte) y mucha paciencia.


¿Existe una forma mejor?


Of course 🙂


La idea es sencilla: obtienes una referencia al control en cuestión (en una página simplemente uisas su nombre, por ejemplo GridView1) y usas un HtmlTextWriter para llamar a su método Render o RenderControl (de la clase base Control) y así obtener el resultado de su visualización.


Por ejemplo:


StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.Render(htw);
Response.Write(htw.ToString());

Obviamente para enviar el resultado al cliente habría que meter antes un encabezado con el tipo de archivo (text/html) y si queremos que se visualice u ofrezca la posibilidad de guardarlo a disco, pero eso es tema para otro post 🙂


Este resultado lo puedes guardar en un archvio o en una BD, enviarlo por e-mail, etc… Es muy útil.

Sin categoría

5 thoughts on “Cómo enviar los resultados de un control Web a una cadena

  1. este es util, creanme, es muchos casos los usuarios quieren tener los resultados en archivos. aunque claro hay otras formas como exportarlas a excel, pero html tambien es bueno. como un archivo plano.

  2. Bueno, en realidad con esta técnica podrías exportar a Excel también puesto que si a una tabla HTML (resultado del GridView) le pones extensión .xls y ajustas adecuadamente la cabecera (el tipo MIME)para enviar el archivo, se recibe como una Excel perfectamente.

    Saludos

    JM.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *