Cuando trabajamos con reportes siempre requerimos la funcionalidad de  exportación. En crystal reports para asp.net, realizar esta tarea es  sumamente sencillo. Sin embargo la pregunta más grande que salta  siempre, es como realizarlo utilizando código Behind.
Para poder acceder a las librerias de crystal y sus componentes,  primero debemos importar los espacios de nombres:
Normal
0
21
false
false
false
ES
X-NONE
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
            
Imports  CrystalDecisions.CrystalReports.Engine
Imports  CrystalDecisions.Shared
 CrystalDecisions.CrystalReports.Engine, nos servirá para poder  manejar nuestro reportDocument y CrystalDecisions.Shared, será el medio  que utilicemos para la exportación.
Así que, veamos como podemos exportar nuestro informe sin tener que  enviarlo a la impresora, recordemos que por defecto crystal reports ya  tiene la opcion de exportar a PDF sin embargo debemos hacerlo tal como  si fueramos a imprimir y que es lo que evitaremos acá.
Colocamos un botón en nuestra pagina asp
Normal
0
21
false
false
false
ES
X-NONE
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
         
<asp:Button ID="btntopdf" runat="server" Text="Exportar a PDF" />
Y en nuestro boton deberemos ejecutar la siguiente rutina:
Normal
0
21
false
false
false
ES
X-NONE
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
 
Protected Sub btntodpf_Click(ByVal sender As Object, ByVal e As  System.EventArgs) Handles btntopdf.Click
 
       'Cargar  reporte. Enlazando a la fuente de datos.
       LoadReporte()
 
       'Mas adelante veremos que estas lineas las  podemos obviar
       Response.Buffer = False
       Response.Clear()  'ClearContent, ClearHeaders
 
       reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat,   Response, True, "NombreArchivo")
   
   End Sub
LoadReport, es el encargado de llenar nuestro crystal con la fuente  de datos.
Está fue la primer forma de exporta nuestro crystal reports, pero no  es la única, así que vamos a ver otra forma en la cual utilizaremos el  metodo
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
Normal
0
false
21
false
false
false
ES
X-NONE
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
ExportToHttpResponse
 Para este metodo, nuestro código en el botón cambia relativamente,  pero antes de ello, daremos un repaso a los metodos utilizados.
Nuestro  primer parametro FormatType es  un valor de tipo ExportFormatType,  que puede corresponder a cualquiera de los metodos que enumeramos a  continuación: 
CrystalReport: El formato al cual se  exporta es de Tipo CrystalReport.
Excel:  El formato al cual se exporta es de tipo Excel
ExcelRecord: El formato al cual se  exporta es de Tipo Excel Record.
NoFormat:  No se ha especificado un formato de exportación.
PortableDocFormat: El formato al cual  se exporta es de Tipo PDF.
 No voy a enumerar todos, pues me  imagino que ya sabrán la idea de cada uno de los formatos, los numerados  arriba son los mas importantes.
Nuestro segundo parametro el objeto response nos permite adozar el archivo.
Y por  último, nuestro tercer parametro, definirá  si debe ir como un objeto adjunto o no. Si lo colocamos en TRUE,  estaremos enviando nuestro archivo como parametro, esto hará que no  necesitemos las siguientes líneas de código:
Normal
0
21
false
false
false
ES
X-NONE
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
Response.Buffer  = False
Response.Clear()
   Con esto realizado, ya contamos con la posibilidad de enviar el archivo  directamente al cliente. 
 
Ahora si,  veamos cuanto se ha reducido nuestro código:
Unicamente nos quedan  dos líneas de código en nuestro botón
Normal
0
21
false
false
false
ES
X-NONE
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
       'Cargar reporte. Enlazando a  la fuente de datos.
       LoadReport()
 
       reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response,  True, "NombreArchivo")
   Para finalizar, nada mas decir que espero esto les sea de ayuda y por  supuesto,  que les facilite la vida con el uso de crystal reports.