exportar reportes crystal reports en asp

Upload: royanderso

Post on 13-Jul-2015

199 views

Category:

Documents


0 download

TRANSCRIPT

Exportar reportes Crystal Reports en ASP.NETIntroduccinCuando se quiere exportar reportes hechos en Crystal Reports y vistos a travs del CrystalReportViewer en aplicaciones ASP.NET, este no cuenta con un botn exportar, que dentro de aplicaciones Windows existe. Este ejemplo permite exportar a diferentes formatos (EXCEL, PDF, RTF y WORD) usando la funcionalidad que trae el Crystal Reports para dicho objetivo.

ExplicacinPara empezar con el ejemplo se crea un nuevo proyecto Web, en este ejemplo toma el nombre de WebApp. Luego se crea un reporte simple, pero antes de eso, tomando en cuenta el diseo de aplicaciones multicapa, en la cual, por ejemplo en el modelo de tres capas, la capa de presentacin no debe tener ningn acceso directo a la base de datos, sino a travs de la capa de lgica de negocios; para lograr este objetivo y dado que Crystal Reports d la posibilidad de disear los reportes a partir de un DataSet, entonces primero se agrega un DataSet al proyecto y se obtiene su estructura arrastrando desde el ServerExplorer la tabla Customers de la base de datos Northwind (tambin se puede hacer manualmente, pero para efectos de prueba se hizo por este camino)

Una vez creado el DataSet, se procede a crear el reporte:

En esta parte se mostrar partes importantes que hacen que funcione el ejemplovbnet:

Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ****************************************************************** ***** Dim strConexion As String = ConfigurationSettings.AppSetting("strConexion")

Dim da As New SqlClient.SqlDataAdapter("select * from Customers", strConexion) ds = New DataSet da.Fill(ds, "Clientes") ' ****************************************************************** ***** rptClientes.SetDataSource(ds.Tables("Clientes")) crvClientes.ReportSource = rptClientes End Sub

En la parte encerrada entre *, debera ir cdigo que utilize la Capa de Negocios para establecer el DataSource del reporte y as evitar el acceso directo a la base de datos (como aparece en el cdigo mostrado).vbnet:

' Crea un stream Dim rptStream As New System.IO.MemoryStream ' Se exporta el reporte a un stream, ' luego se hace una conversin para el tipo adecuado rptStream = CType(rptClientes.ExportToStream(Integer.Parse(ddlTipos.SelectedVa lue)), _ System.IO.MemoryStream) ' Limpia el buffer Response.Clear() Response.Buffer = True ' Establece el tipo de documento Response.ContentType = TipoDocumento() ' Fuerza a hacer un download del archivo Response.AddHeader("Content-Disposition", "attachment;filename=" + Me.nombreXdefecto) ' Escribe el contenido del stream Response.BinaryWrite(rptStream.ToArray()) Response.End()

En el cdigo mostrado, bsicamente lo que se hace es exportar el reporte a un Stream, de acuerdo al tipo de documento seleccionado en el combo y enviarlo al cliente con dichas opciones utilizando el mtodo Response.BinaryWrite que toma como parmetro un array.

ActualizacinGracias al aporte de Felix Azuaje, uno de los lectores del artculo, pongo a disposicin el cdigo que me envi en el cul utiliza otro tipo de conexin (ADODB) para cargar los datos en los reportes y no usando DataSet's. Pueden descargarlo de aqu

Elementos utilizadosy y

Proyecto de Demostracin Ejemplo de Felix Azuaje

Referencias y enlaces relacionadosy y

Export Crystal Report In ASPNET Aplicaciones en Tres Capas

AutorAlexander Concha Abarca Instructor 3ra Estrella - VB.NET