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.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor