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.