Sei sulla pagina 1di 28

Crystal Reports

domingo, 27 de febrero de 2011


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

para VS 2010 mejor valida

http://social.msdn.microsoft.com/Forums/en/vscrystalreports/thread/f129440e-
2fd2-4c2f-a330-33b24d9ea011

saludos
28 de abril de 2012, 16:45

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();

string sURL;
sURL =
"http://www.microsoft.com/presspass/images/gallery/logos/web/ms_net_rgb_
web.jpg";

WebRequest wrGETURL;
wrGETURL = WebRequest.Create(sURL);

Stream objStream;
objStream = wrGETURL.GetResponse().GetResponseStream();

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

rptStream = CType(Reporte.ExportToStream(CInt(ddlTipos.SelectedValue)),
System.IO.MemoryStream)

Response.Clear()
Response.Buffer = True

Response.ContentType = FormatoDocumento()
Response.AddHeader("Content-Disposition", "attachment;filename=" +
"Reporte")

Response.BinaryWrite(rptStream.ToArray())
Response.End()

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

Potrebbero piacerti anche