Crystal Reports Cargar imagen usando una capa de reportes
Introduccin En esta oportunidad se profundizara el trabajo de imgenes pero apuntando a Reportes, concretamente con el uso de Crystal Reports. Para este artculo se continua con el ejemplo de uno previo: [WinForms] Edicin Empleados Grabar imagen en base de datos En el anterior se listaba y editaba los datos del empleado, incluida sus fotografas, en cambio en este artculo se vera como listar en un reporte esta misma informacin. El resultado del reporte final del reporte seria:
Se analizara adems como incluir las imgenes provenientes de una base de datos, y tambin un logo tomado de un archivo de imagen. Capa de Reportes Esto quizs aplique un poco mejor con una arquitectura en capas, pero en este caso aunque no las haya definido del todo, se puede separa en un proyecto concreto la responsabilidad de crear los reportes. Es por eso que se observara en la solucin un proyecto de nombre ReportsLayer, este ser el encargado de: - Encapsular la diseo del reporte - Definicin y estructura de datos que requieres el reporte, en este caso implementada en dataset tipados - La carga de la informacin, conectndose para ello directamente a los datos, esta capa no har uso del DataAccess, porque al usar dataset la carga de datos se torna particular, por lo tanto su funcionalidad requiere una conexin directa.
La idea con esto es separar funcionalidad y adems cubrir un defecto que tiene Crystal Reports, en donde el diseador solo toma como entidades objetos que estn local al proyecto donde se encuentra el rpt. Muchas veces poner en la Presentacin un reporte implicara adems poner all mismo los dataset tipados, lo cual ensucia el modelo. Definicin y carga de datos en el DataSet Para este reporte se defini un dataset tipado con dos datatable en su interior.
Para al carga de los empleados se har uso de la funcionalidad de la clase EmpleadosDAL definida dentro del propio proyecto de Reportes. 01.internal static class EmpleadosDAL 02.{ 03. 04.internal static Empleados ObtenerTodos() 05.{ 06.Empleados empleados = new Empleados(); 07. 08.using (SqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["default"].ToSt ring())) 09.{ 10.conn.Open(); 11. 12.string query = @"SELECT IdEmpleado, Nombre, Apellido, FechaNacimiento, EstadoCivil, Imagen 13.FROM Empleados"; 14. 15.SqlCommand cmd = new SqlCommand(query, conn); 16. 17.SqlDataAdapter da = new SqlDataAdapter(cmd); 18.//es necesario indicar la tabla del dataset que se quiere cargar 19.da.Fill(empleados, "Empleados"); 20. 21.} 22. 23.return empleados; 24.} 25.} All se define la consulta en donde las columnas coinciden en nombre con los definidos en timepo de diseo en el dataset tipado, adems vale aclarar que la clase ha sido declarada como internal de forma intencional, para que solo la capa de Reportes pueda usar esta funcionalidad, es mas la idea es que se limite al mximo el acceso a funcionalidad que solo esta clase debera utilizar, por eso el dataset tipado tambin tiene el modificador de acceso asignado a internal.
Un punto adicional es la carga de una imagen externa que representa el logo de la empresa, el mismo no se encuentra en la db sino que es un archivo, es por eso que luego de cargar el reporte se observan las lneas: 1.Empleados.EmpresaRow row = empleado.Empresa.NewEmpresaRow(); 2.row.Logo = ImageHelper.ImageToByteArray(ImageHelper.ObtenerImagenLogoEmpresa()); 3.empleado.Empresa.Rows.Add(row); encargadas justamente de crear una row en al datatable con la imagen del logo. En este caso se hace uso de la funcionalidad del Helper de Imgenes creado para tomar la imagen embebida como recurso. Retorno del Reporte Esta cada de reportes solo debera ser accedida por medio de la clase Reports con su metodo ObtenerReporteEmpleados() este devolver la instancia del reporte con la informacin asignada lista para ser mostrada en pantalla, o exportada si es necesario. 01.public static class Reports 02.{ 03. 04.public static ReporteEmpleados ObtenerReporteEmpleados() 05.{ 06.ReporteEmpleados report = new ReporteEmpleados(); 07. 08.// 09.// Se obtienen los datos de la lista de empleados 10.// 11.Empleados empleado = EmpleadosDAL.ObtenerTodos(); 12. 13.// 14.// Se agrega el logo de la empresa a la informacion del listado 15.// 16.Empleados.EmpresaRow row = empleado.Empresa.NewEmpresaRow(); 17.row.Logo = ImageHelper.ImageToByteArray(ImageHelper.ObtenerImagenLogoEmpresa()); 18.empleado.Empresa.Rows.Add(row); 19. 20.// 21.// Se asigna los datos a la instancia del reporte 22.// 23.report.SetDataSource(empleado); 24. 25.return report; 26.} 27. 28.} Lanzar el Reporte en al Presentacin El ultimo punto por tratar es como se usara lo anteriormente explicado desde la presentacin. Por un lado contamos con un formulario especialmente creado para desplegar el reporte, el mismo solo cuanta con el CrystalReportViewer y recibe por parmetro la instancia del reporte que debe mostrar. 01.public partial class Reporte : Form 02.{ 03.private ReportClass _report = null; 04. 05.public Reporte() 06.{ 07.InitializeComponent(); 08.} 09. 10.public Reporte(ReportClass report) 11.:this() 12.{ 13._report = report; 14.} 15. 16.private void Reporte_Load(object sender, EventArgs e) 17.{ 18.crystalReportViewer1.ReportSource = _report; 19.} 20.} Se define un nuevo constructor del formulario para pasar la instancia del reporte al formulario y es en el Load del mismo que se asigna al Viewer, para desplegar el reporte en pantalla. Por otro lado tenemos un botn en la pantalla de ListaEmpleados, el cual recupera el reporte, con los datos asignados, y se la pasa a la instancia del formulario para que la muestre en pantalla. 01.private void btnListar_Click(object sender, EventArgs e) 02.{ 03. 04.ReporteEmpleados report = Reports.ObtenerReporteEmpleados(); 05. 06.Reporte frmReporte = new Reporte(report); 07.frmReporte.Show(); 08. 09.}
Cdigo de ejemplo La base de datos utilizada en el ejemplo es la Sql Server Express 2008 R2, como ver en la solucin el mdf esta integrado al Visual Studio, por lo tanto con solo tener el sql server express instado esta debera funciona adjuntndose sola al servicio. En la carpeta script del proyecto DataAccess se encuentra un archivo .sql con las instrucciones para crear la estructura de tablas y datos que se requieren para este articulo.
[C#]
[VB.NET]
Publicado por Leandro Tuttini en 21:30 Etiquetas: Crystal Reports 50 comentarios:
rafa dijo... Hola Leandro muy bueno tu blog me ha servido bastante, pero tengo una dificultad y por mas que he buscado no encuentro como hacerlo, estoy haciendo un programa para un colegio pero al tratar de imprimir el boletin de notas no se como hacerlo sera que me puedes ayudar yo estoy imprimiendo con crystal report y c#, la dificulta esta en que no se como manejar bien el crystal report y hacer le informe para que me salga todos los estudiantes con su respectivo boletin y sus notas. te agradesco de antemano 29 de marzo de 2011, 15:09
Leandro Tuttini dijo... hola rafa
En principio imagino has definido el dataset tipado que usaras como origen de datos del reporte. Recuerda que puedes crear la estructura del datatable de forma manual, no necesariamente deberas arrastrarlo desde una tabla de tu db, puedes crear el datatable en el xsd y definir columnas y tipos de datos. Algo como esto
Crystal Reports Usar DataSet Tipado con dos DataTable
Luego deberas definir la consulta usando los JOIN que sean necesario y defiendido los campos que coincidan con los nombres que ahs puesto en el datatable del xsd.
El resto solo seria cargar los registros y pasarselo a Crystal.
El tema del diseador deberia ser simple, en la seccion de detalle pondrias los registrso que se repetiran, por ahi esto ayude:
Crystal Reports Para Visual Studio.net Visual Basic.net
saludos 29 de marzo de 2011, 21:18
hgjhgj dijo... Hola leandro, genial tus post, una consulta yo no tengo el SQL 2008 Xpress, tan solo el SQL2005 Managament Studio, me pregunto si podrias subir el script de tu BD, es que estoy teniendo ese problemita con todos tus ejemplos, gracias!! 21 de mayo de 2011, 22:19
hgjhgj dijo... Sorry, me equivoke de post, era para escribirlo en otro de tus post, mil disculpas!!! 21 de mayo de 2011, 22:22
Leandro Tuttini dijo... hola hgjhgj
Dime de cual articulo requieres los script
saludos 22 de mayo de 2011, 18:57
VICTOR DANIEL dijo... Hola leandro. Primeramente gracias por la disponibilidad. Tengo una pequea duda: como puedo generar los reports en VISUAL STUDIO pero en la version EXPRESS o en SHARPDEVELOP (ambos no incluyen CRYSTAL REPORT). La idea que tengo es desarrollar todas mis aplicaciones en un software libre. Aguardo tus comentarios. Saludos 25 de mayo de 2011, 6:18
Leandro Tuttini dijo... hola VICTOR DANIEL
El tema es que no puedes, justamente una de las limitantes de la versiones Express es que no incluyen soporte para reportes.
Deberias conseguir una version Professional o superior para poder usar Crystal (o Reporting Service)
saludos 25 de mayo de 2011, 14:47
VICTOR DANIEL dijo... Gracias por la aclaracion y la disposicion 27 de mayo de 2011, 7:40
Chamako De Barrio dijo... Hola Leandro recurro a ti como mi ltima opcin ojala me puedas ayudar de verdad, lo que pasa que estoy trabajando con VS 2010 y Crystal Report y me funciona muy bien todo, pero tengo que hacer un reporte con multiples columnas es decir algo as
cliente1 cliente2
cliente3 cliente4
Algo as no se si me dejo entender bueno lo estoy plasmando en un crystal report y he visto por la red que se configura una seccin detalles y todo lo he hecho, pero nada an sigo sin poder hacerlo espero que me ayudes lo antes posible que de verdad lo necesito gracias 7 de junio de 2011, 14:15
Leandro Tuttini dijo... hola Chamako De Barrio
Te refierea a algo como lo explicado aqui
Crystal Reports: Multiple Columns and Header Groups
saludos 7 de junio de 2011, 20:43
Chamako De Barrio dijo... Si ya lo logre hacer muchas gracias por tu pronta respuesta ese mismo da me sali, pero tuve que quedarme hasta un poco ms tarde en el trabajo una consulta ms no tendras ejemplos con crystal report pero para estadisticos, es decir con barras o el pie porfavor si tienes algo publica una entrada o sino envamelo a eflorespalma@hotmail.com y nuevamente muchas gracias por todo. 9 de junio de 2011, 8:52
Jhon Sullca Larico dijo... Muy bueno tu blog Leandro, pero tengo un problema con el manejo de imagen, te cuento yo tengo un reporte en .Asp con imagen que funciona normal localmente pero cuando lo pblico el proyecto no carga el imagen como que no lo encuentra la imagen podras darme una sugerencia amigo Leandro. 5 de noviembre de 2011, 17:41
Leandro Tuttini dijo... hola Jhon
has validado que la ruta relativa a la imagen es correcta?
seguramente estes usando una url que define ../ o algo similar para referenciar la imagen pero esto puede variar si en el entorno local donde defines un sitio que usa un directorio virtual, porque al publicar este ya no esta, y las rutas pueden quedar mal
si usas controles de asp.net recuerda que puedes usar el ~/ este crea el path desde el root del sitio
saludos 6 de noviembre de 2011, 21:08
fer007 dijo... Buenas tardes Leandro, encontre ese link: http://www.businessobjects.com/jump/xi/crvs2010/us2_default.asp para descargar el Crystal Reports, y quera saber si es GRATUITO, osea para uso comercial y si funciona para Visual Studio 2010 en Espaol. Muchas gracias, espero su respuesta master. 27 de abril de 2012, 9:29
Leandro Tuttini dijo... hola fer007
si ese link permite obtener los redistribuibles de Crystal que puedes usar libremente
fer007 dijo... Disculpa Leandro, es un buen link el que me pasaste, pero a que refieres con "validar", ps en el foro hay muchas discrepancias, cual es la mejor forma?, yo utilizo el: Visual Studio 2010 Ultimate en Espaol, q' problema habria al instalar los "redistribuibles Crystal Reports SAP"?. Help me pleaseeeee. ...no s si ser mucho pedir una muestra en el blog acerca de la instalacin SAP Crystal Reports y complementarlo con el VS2010. Gracias. 30 de abril de 2012, 7:26
Leandro Tuttini dijo... hola fer007
por validar apuntaba que en el link del foro de msdn se mencionan los link correctos a los redistribuibles de VS2010 por eso decia que valides, o sea que revises porque alli mencionas lo de 2010, el link que hacias mencion al principio solo estan los redistribuibles hasta el 2008
saludos 1 de mayo de 2012, 13:10
fer007 dijo... Buenos das Leandro, gracias por tu respuesta, pero como deca en el contenido del link enviado: "SAP Crystal Reports, version for Visual Studio 2010", osea para Visual 2010, y no 2008, de todos modos chequear tu observacin. Gracias, y si se pudiera especificar el LINK para descargar directamente el Crystal Reports no habra problema... 3 de mayo de 2012, 7:56
wnarrea dijo... Que tal Leandro, de antemano agradezco vuestra respuesta. tengo un problema al momento de llevar a produccin mi aplicacin especificamente para visualizar los reportes de Crystal Report. http://social.msdn.microsoft.com/Forums/es- xl/vsrepcrystales/thread/ce3d6dee-ee0a-4290-a774-ebad95dcccce 23 de mayo de 2012, 12:59
Leandro Tuttini dijo... hola wnarrea
respondi en el foro 24 de mayo de 2012, 6:16
CristianAngelus dijo... muy buen ejemplo, gracias 27 de julio de 2012, 14:38
Carlos Cimino dijo... Hola Leandro... muy bueno el blog y tus ejemplos... se puede adaptar este al uso del objeto report que trae vs2010? porque no tengo Crystal y llego hasta una parte, luego no me reconoce el reporte como un objeto de la ReportLayer. 17 de agosto de 2012, 12:34
Leandro Tuttini dijo... hola Carlos
recuerda que en VS2010 Crystal se instala aparte
[VS2010] Que pasa Con Crystal Reports y Visual Studio 2010
saludos 17 de agosto de 2012, 12:38
Bonifacio Lopez Garcia dijo... Hola, tengo una bd y en un campo guardo el path de mi foto, podrias decirme como le hago para mostrar esa foto en mi reporte de Crystal? lo tengo en VB y mi BD esta en SQLite 10 de noviembre de 2012, 9:48
Leandro Tuttini dijo... hola Bonifacio
lo haces de la misma forma que se explcia en el articulo, solo que tendrias un paso previo que consiste en recuperar la ruta de la db
puedes usar el
File.ReadAllBytes()
para pasar de un archivo con al imagen a el campo del datatable
saludos 10 de noviembre de 2012, 11:34
Steven Gomez dijo... Saludos, antes que nada quiero agradecer por sus exelentes aporte, pero quiero comentarle que en el proyacto que usted subio C#, no esta completo, falta la carpeta EmpleadoLayer, donde esta el rpt y el DataSet. 15 de noviembre de 2012, 5:53
Israel Cazares dijo... Les pongo las lineas que le cambie al metodo para que pudiera obtener la imagen desde una URL, y poderla mostrar en el RPT, sin necesidad de estar en el mismo servidor de la aplicacin.
Saludos
public static Image ObtenerImagenLogoEmpresa() { Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
return Image.FromStream(objStream); } 11 de febrero de 2013, 16:26
Francisco Huamanyauri Pacherres dijo... Hola Leanro muy bueno tu blog quisiera saber si podria visualizar imagenes de carpetas en el crystal, descarge tu aplicacion en c# y veo que todo lo ingresas en la BD pero como haria con una ruta de imagen 26 de febrero de 2013, 22:13
Leandro Tuttini dijo... hola Francisco
si en principio se puede lograr, en la db imagino tendrias la ruta relativa a la imagen o al menos el nombre del archivo de imagen
podrias poner en el campo imagen en el reporte, pero en este vas a tener que definir una formula que arme de forma correcta la ruta a la imagen que debe mostrar
saludos 27 de febrero de 2013, 22:29
victor dijo... Hola Leandro. Segui paso a paso el diseo de la capa de reportes, todo perfecto hasta alli, pero al publicar la aplicacion con el asistente de .net, no me carga el reporte, no entiendo por qu: reportEtnia.SetDataSource(ds_Principal) Asumo que podria ser que no encuentra los reportes para asociarle los datos cargados.!! Agradeceria una ayuda. saludos Victor 13 de marzo de 2013, 7:21
Leandro Tuttini dijo... hola victor
pero simplemente no muestra el reporte, o estas obteniendo algun mensaje de error ? porque es raro que solo no lo muestre sin ningun fallo
valida que los .rpt este con el .exe en la misma carpeta
valida ademas que hayas instalado el redistribuible de crystal en la pc del usuario, para la version de crystal que estes usando
saludos 14 de marzo de 2013, 1:29
back up dijo... Hola Leandro podrias hacer este mismo sistema en ASP.NET porfa SALUDOS 16 de marzo de 2013, 14:55
Leandro Tuttini dijo... hola back up
claro que se puede, crystal tambien se puede implementar en un entorno web, aplica de la misma forma
saludos 17 de marzo de 2013, 13:08
Marco David Yepez Romero dijo... Buenos Dias Leandro, estoy tratando de Correr Los Proyectos en Vb.net pero me dice que el motor de base de ddatos no es compatible con Sql Server 2005, siendo que en pi Pc tengo instalado Sql Server 2008 R2, el mismos, que se hace referencia en el proyecto, ahora la base de datos debe estar creada en el Motor? 23 de abril de 2013, 8:13
Leandro Tuttini dijo... hola Marco
asi es el motor de base datos que utilizo es sql express 2008 R2
no validaste si de casualidad hay alguna instancia de sql 2005 ejecutando ?
si tienes instalado el VS 2005, este incluye este motor quizas te quedo la instancia ejecutando
saludos 24 de abril de 2013, 6:37
bLaCkLaDy dijo... Hola Leandro Gracias por ejemplo
yo al fin pude instalar las librerias nuevas de Crystal 12 en Sharp Develop pero ahora tengo un error con mi SQL yo no tengo el express tengo el sql2008 por lo cual me manda un error necesito cambiarle el string de conexin y me marca el error pero no veo donde se lo puedo cambiar en que archivo me puedes ayudar? 28 de mayo de 2013, 20:41
Leandro Tuttini dijo... hola bLaCkLaDy
los datos como los obtienes de la db? estas usando codigo ado.net para lanzar una query que carga un dataset (el cual asignas luego al reporte)
has validado si no esta el connection string en el app.config
saludos 30 de mayo de 2013, 6:03
VaLeK dijo... Hola Leandro qu tal? Cheque tu ejemplo de VB.Net para mostrar imgenes en un reporte de CR y no me funciono o posiblemente no supe como implementar tu cdigo.
Checa, estoy haciendo un sistema de facturacin digital y tengo que imprimir un cdigo bidimensional o QR en la factura, siempre va a ser el mismo a menos que el usuario lo cambie; ya intente varias opciones y no logro que el reporte me cargue la imagen. En la BD solo tengo la ruta y el nombre del archivo y esos si logro traerlos y almacenarlos temporalmente pero no logro asignarlos al PictureBox del reporte para que los muestre, me marca el siguiente error:
"El ndice no es vlido. (Excepcin de HRESULT: 0x8002000B (DISP_E_BADINDEX))" y de ah se sale y nunca muestra el reporte.
qu podra ser lo que este fallando? :S 21 de junio de 2013, 20:57
Leandro Tuttini dijo... hola VaLeK
pero para poder ver la imagen en el reporte deberias poner el array de byte de esta en un campo del datatable que vincules con el reporte
poner la ruta no va a funcionar
saludos 23 de junio de 2013, 11:21
Manuel dijo... Hola Leandro ya me carga el formulario principal con las imagenes, pero cuando doy clic en el boton Nuevo me manda un Error: El valor 'Null' no es valido para 'stream'. El error me lo manda en una linea de cdigo de ImageHelper.vb en la funcion Obtenerimagennodisponible. La linea es la de "Return Image.FromStream(file)".... Nota: estoy usando vb.net y Visual Studio 2010 15 de agosto de 2013, 17:28
Leandro Tuttini dijo... hola Manuel
ese error se produce porque seguramente la imagen de no disponible no esta correctamente embebida dentro del componente, o sea no la cambiaste para que sea un embedded resource
o porque el path que indicas usando el namespace.nombrearch.extension, no esta correcto recuerda que si hay una carpeta esta tambien forma parte del nombre
saludos 15 de agosto de 2013, 18:59
Manuel dijo... Gracias Leandro Disculpa mi ignorancia pero no entendi en realidad lo que tengo que hacer... 16 de agosto de 2013, 6:36
Leandro Tuttini dijo... hola manuel
cuando en el ejemplo uso esto ImageHelper.ObtenerImagenLogoEmpresa() estoy tomando la imagen embebida como recurso en el proyecto, para eso selecciona la imagen y ve a sus propiedades, hay una que dice
embedded resource
eso es lo primero que debes validar si lo has asignado
saludos 17 de agosto de 2013, 22:34
Rony Olazabal dijo... Hola Leandro excelente aporte de implementacion de reportes en una arquitectura de capas. Pero tengo la siguiente duda: Este desarrollo funciona perfecto si todo se monta en un mismo PC pero en un escenario de 1 servidor de BD y 50 PC clientes tendria que replicar los reportes fuentes en cada PC, lo cual resultaria engorroso si posteriormente hay cambios? de acuerdo a la pregunta anterior como se resolveria este escenario? 3 de septiembre de 2013, 18:04
Leandro Tuttini dijo... hola Rony
podrias ver si se puede serializa el ReportDocument, entonces enviarlo desde un servidor central por supuesto apunto a implementar una capa de negocio remota con servicio web, quizas con WCF
entonces el cliente pide el reporte al servicio y este le responde con la serializacion del reporte
en este punto tambien vi que se recomienda exportar el reporte quizas a pdf, en el servidor entonces envias al cliente el archivo generado y no un reporte de crystal el cual queda en el servidor
ReportDocument serialization
saludos 5 de septiembre de 2013, 22:32
Adolfredo Belizario dijo... Hola Leandro, Mi duda es la siguiente, tengo un reporte que No tengo problemas para imprimr una sola Guia, es un reporte creado con Crystal Reports desde una aplicin web. Envo los parmetros de la gua, y todo me funciona bien pero para una sola Gua.
Mi idea seria es obtener un slo documento con varias Guias (para imprimirlas todas de golpe y no ir generando una por una) a partir del mismo reporte.
El cdigo que estaba haciendo era con un for sabiendo la cantidad de veces que se quera imprimir las guas
For i As Long = 1 To NumeroPagina Dim oReporte As New rptGuia ' INSTANCIA DE TU ARCHIVO *.RPT oReporte.SetParameterValue("numeroGuia", NumeroGuia) oReporte.SetParameterValue("nombreTecnico", Nombre) Me.crvReporte.ReportSource = oReporte ' ASIGNANDO AL CRYSTAL REPORT VIEWER
NumeroGuia = NumeroGuia + 1 oReporte = Nothing
Next i
Pero el problema es que siempre me visualiza es el ultima Gua.
Ejemplo le digo que me visualice 10 guas y debera de visualizarme 10 documentos, pero me visualiza un documento y es el ultimo. 27 de enero de 2014, 14:51
Leandro Tuttini dijo... hola Adolfredo
no se puede mostrar en un mismo control viewer varios reportes porque es logico que solo mostrara uno y sera el ultimo asignado
podrias crear dinamicamente controles viewer en el form o podrias hacer que los datos se unan en un solo origen de datos y lo asignes a un solo reporte pero este genere N paginas, una pagina por cada valor que envies
por supuesto los parametros deberian ir junto a los datos
tambien se podria lanzar los reportes en difernetes ventanas, haciendo un form.Show() por cada reporte, en donde cada forma tendria un viewer para ver cada reporte por separado como cada instancia de forma es un reporte cada uno tendria su juego de datos
saludos 29 de enero de 2014, 3:40
nyvlem25 dijo... Hola leandro muy interesante tu articulo queria saber para hacer un reporte avanzado con graficos estadisticos, diagramas de pastel, etc, existe algun otro metodo de hacer reportes aparte del crystal, a nivel web, saludos 15 de marzo de 2014, 22:46
Leandro Tuttini dijo... hola nyvlem25
En asp.net existen controles, es mas si usas VS2010 este ya incluye el control Chart
Asp.net Chart Control
saludos 16 de marzo de 2014, 7:18
Juan Carlos dijo... Hola Leandro, estoy trabajando con vs2010 y crystal reports a 3 capas, no estoy trabajando con dataset, estoy trabajando con store procedure .Los reportes los estoy cargando directo (este es mi codigo), el reporte contiene un subreporte a la vez. Dim Reporte As New ReportDocument Dim pf As New ParameterField Dim pfs As New ParameterFields Dim pv As New ParameterValues Dim pdv As New ParameterDiscreteValue
En el load de a pagina: pf.Name = "@numero"
Dim numero As Int32 = Request.QueryString("numero")
Dim Tipo As String = Request.QueryString("Tipo")
If Tipo = "CN" Then pfs.Clear() pdv.Value = numero pf.CurrentValues.Add(pdv) pfs.Add(pf) CrystalReportViewer1.ParameterFieldInfo = pfs Reporte.Load(Server.MapPath("Reportes\MiReporte.rpt")) CrystalReportViewer1.ReportSource = Reporte Reporte.SetDatabaseLogon("user", "pass", "servidor", "BD")
hasta aqui normal, el reporte se muestra en el Form. Ahora necesito exportar este reporte en pdf, word, excel, para eso he creado un boton exportar y dropdown con las opciones, pero al exportar me muestra el error: "Faltan los valores del parametro"
Btn_Exportar Dim rptStream As New System.IO.MemoryStream
Para llenar el combo: Private Function FormatoDocumento() As String
Dim tipo As String Dim nombreReporte As String = "Reporte"
Select Case Integer.Parse(ddlTipos.SelectedValue)
Case ExportFormatType.Excel tipo = "application/vnd.ms-excel" nombreReporte &= ".xls" Case ExportFormatType.RichText tipo = "application/rtf" nombreReporte &= ".rtf" Case ExportFormatType.WordForWindows tipo = "application/msword" nombreReporte &= ".doc" Case Else tipo = "application/pdf" nombreReporte &= ".pdf" End Select Return tipo
End Function
Espero me puedas ayudar a resolver esto, ya no se que hacer, he probado diferentes formas de exportar y siempre me muestra el mismo error