Download - Leandro Tuttini Blog_ Crystal Reports

Transcript
Page 1: Leandro Tuttini Blog_ Crystal Reports

domingo 27 de febrero de 2011

Crystal Reports – Cargar imagen usando unacapa de reportes

Introducción

En esta oportunidad se profundizara el trabajo de imágenespero apuntando a Reportes, concretamente con el uso deCrystal Reports.

Para este artículo se continua con el ejemplo de uno previo:

[WinForms] Edición Empleados – Grabar imagen en base dedatos

En el anterior se listaba y editaba los datos del empleado,incluida sus fotografías, en cambio en este artículo se veracomo listar en un reporte esta misma información.

El resultado del reporte final del reporte seria:

Archivo del blog

▼ 2011 (9)

► mayo (2)

► abril (2)

► marzo (2)

▼ febrero (3)

Crystal Reports –

Cargar imagen

usando una capa

de...

[ASP.NET] Lockear

Edición de Entidades

[WinForms] Edición

Empleados – Grabar

imagen en ba...

► 2010 (55)

► 2009 (22)

► 2008 (1)

Datos personales

LEANDRO

TUTTINI

Ver todo miperfil

Microsoft MVP C# 2010

Compartir Informar sobre mal uso Siguiente blog» Crear un blog Acceder

Leandro Tuttini Blog

Mostrando las entradas más recientes con la etiquetaCrystal Reports Mostrar las entradas más antiguas

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 1/23

Page 2: Leandro Tuttini Blog_ Crystal Reports

Se analizara además como incluir las imágenes provenientes deuna base de datos, y también un logo tomado de un archivo deimagen.

Capa de Reportes

Esto quizás aplique un poco mejor con una arquitectura encapas, pero en este caso aunque no las haya definido del todo,se puede separa en un proyecto concreto la responsabilidad decrear los reportes.

Es por eso que se observara en la solución un proyecto denombre ReportsLayer, este será el encargado de:

- Encapsular la diseño del reporte

- Definición y estructura de datos que requieres el reporte, eneste caso implementada en dataset tipados

- La carga de la información, conectándose para ellodirectamente a los datos, esta capa no hará uso delDataAccess, porque al usar dataset la carga de datos se tornaparticular, por lo tanto su funcionalidad requiere una conexióndirecta.

Etiquetas

ADO.NET (10)

ASP.NET (18)

C# (24)

Crystal Reports (5)

DataGridView (13)

GridView (6)

JavaScript (1)

jQuery (9)

Linq (3)

MS Access (2)

N-Tier (5)

NHibernate (1)

Office (1)

VB.NET (5)

Visual Studio (1)

WinForm (25)

Seguidores

Google Friend Connect

Seguidores (87) Más »

Seguir

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 2/23

Page 3: Leandro Tuttini Blog_ Crystal Reports

La idea con esto es separar funcionalidad y además cubrir undefecto que tiene Crystal Reports, en donde el diseñador solotoma como entidades objetos que estén local al proyectodonde se encuentra el rpt. Muchas veces poner en laPresentación un reporte implicaría además poner allí mismo losdataset tipados, lo cual ensucia el modelo.

Definición y carga de datos en el DataSet

Para este reporte se definió un dataset tipado con dosdatatable en su interior.

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 3/23

Page 4: Leandro Tuttini Blog_ Crystal Reports

Para al carga de los empleados se hará uso de la funcionalidadde la clase EmpleadosDAL definida dentro del propio proyectode Reportes.

Allí se define la consulta en donde las columnas coinciden ennombre con los definidos en timepo de diseño en el datasettipado, además vale aclarar que la clase ha sido declaradacomo internal de forma intencional, para que solo la capa deReportes pueda usar esta funcionalidad, es mas la idea es quese limite al máximo el acceso a funcionalidad que solo esta

01.02.03.04.05.06.07.08.

09.10.11.12.

13.14.15.

16.17.

18.

19.20.21.22.23.24.25.

internal static class EmpleadosDAL{

internal static Empleados ObtenerTodos(){

Empleados empleados = new Empleados();

using (SqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))

{conn.Open();

string query = @"SELECT IdEmpleado,

Nombre, Apellido, FechaNacimiento,EstadoCivil, Imagen

FROM Empleados";

SqlCommand cmd = newSqlCommand(query, conn);

SqlDataAdapter da = new

SqlDataAdapter(cmd);//es necesario indicar la tabla del

dataset que se quiere cargarda.Fill(empleados, "Empleados");

}

return empleados;

}}

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 4/23

Page 5: Leandro Tuttini Blog_ Crystal Reports

clase debería utilizar, por eso el dataset tipado también tiene elmodificador de acceso asignado a internal.

Un punto adicional es la carga de una imagen externa querepresenta el logo de la empresa, el mismo no se encuentra enla db sino que es un archivo, es por eso que luego de cargar elreporte se observan las líneas:

encargadas justamente de crear una row en al datatable con laimagen del logo. En este caso se hace uso de la funcionalidaddel Helper de Imágenes creado para tomar la imagen embebidacomo recurso.

Retorno del Reporte

Esta cada de reportes solo debería ser accedida por medio dela clase Reports con su metodo ObtenerReporteEmpleados()este devolverá la instancia del reporte con la informaciónasignada lista para ser mostrada en pantalla, o exportada si esnecesario.

1.

2.

3.

Empleados.EmpresaRow row =empleado.Empresa.NewEmpresaRow();

row.Logo =ImageHelper.ImageToByteArray(ImageHelper.ObtenerImagenLogoEmpresa());

empleado.Empresa.Rows.Add(row);

01.02.03.04.

05.06.

07.08.

public static class Reports{

public static ReporteEmpleados

ObtenerReporteEmpleados(){

ReporteEmpleados report = newReporteEmpleados();

//

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 5/23

Page 6: Leandro Tuttini Blog_ Crystal Reports

Lanzar el Reporte en al Presentación

El ultimo punto por tratar es como se usara lo anteriormenteexplicado desde la presentación.

Por un lado contamos con un formulario especialmente creadopara desplegar el reporte, el mismo solo cuanta con elCrystalReportViewer y recibe por parámetro la instancia delreporte que debe mostrar.

Se define un nuevo constructor del formulario para pasar lainstancia del reporte al formulario y es en el Load del mismo quese asigna al Viewer, para desplegar el reporte en pantalla.

09.

10.11.

12.13.14.

15.16.

17.

18.19.20.21.

22.23.24.25.26.27.28.

// Se obtienen los datos de la lista deempleados

//Empleados empleado =

EmpleadosDAL.ObtenerTodos();

//// Se agrega el logo de la empresa a la

informacion del listado//Empleados.EmpresaRow row =

empleado.Empresa.NewEmpresaRow();row.Logo =

ImageHelper.ImageToByteArray(ImageHelper.ObtenerImagenLogoEmpresa());

empleado.Empresa.Rows.Add(row);

//// Se asigna los datos a la instancia del

reporte//report.SetDataSource(empleado);

return report;

}

}

01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.

17.18.19.20.

public partial class Reporte : Form{

private ReportClass _report = null;

public Reporte(){

InitializeComponent();}

public Reporte(ReportClass report)

:this(){

_report = report;}

private void Reporte_Load(object sender,

EventArgs e){

crystalReportViewer1.ReportSource = _report;}

}

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 6/23

Page 7: Leandro Tuttini Blog_ Crystal Reports

Por otro lado tenemos un botón en la pantalla deListaEmpleados, el cual recupera el reporte, con los datosasignados, y se la pasa a la instancia del formulario para que lamuestre en pantalla.

Código de ejemplo

La base de datos utilizada en el ejemplo es la Sql ServerExpress 2008 R2, como ver en la solución el mdf esta integradoal Visual Studio, por lo tanto con solo tener el sql serverexpress instado esta debería funciona adjuntándose sola alservicio.

En la carpeta “script” del proyecto “DataAccess” se encuentraun archivo .sql con las instrucciones para crear la estructura detablas y datos que se requieren para este articulo.

[C#] [VB.NET]

Publicado por Leandro Tuttini en 21:30 4 comentarios

Etiquetas: Crystal Reports

miércoles 5 de mayo de 2010

Crystal Reports – Parameters – Comoasignarlos desde código .net

Introducción

Un problema frecuente cuando se usa Crystal Reports es elpasaje de información por medio de parámetros al reporte.

El uso de parámetros es un aspecto importante para la creaciónde reportes, y suele suceder que no es tan intuitiva, ni directala forma en como se debe programar esta funcionalidad.

01.

02.03.04.

05.06.07.08.09.

private void btnListar_Click(object sender, EventArgse)

{

ReporteEmpleados report =Reports.ObtenerReporteEmpleados();

Reporte frmReporte = new Reporte(report);frmReporte.Show();

}

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 7/23

Page 8: Leandro Tuttini Blog_ Crystal Reports

la forma en como se debe programar esta funcionalidad.

Definición del parámetro en Crystal

En este ejemplo se usara el parámetro como filtro de los datosdel reporte, por lo tanto se creara en el mismo momento en quese define la información.

Para esto se usara la opción “DataBase Expert”:

En el cuadro de dialogo que se despliega, se deber crear unanueva conexión a la base de datos Access usada en el reporte:

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 8/23

Page 9: Leandro Tuttini Blog_ Crystal Reports

Haciendo uso en este cuadro, no directamente la tablamostrada, sino la opción “Add Command”, la cual permitirádefinir una consulta personalizada.

Es por eso que desplegara el cuadro:

Y se definirá un parámetro mediante la opción de la derecha.

Solo queda definir la consulta, haciendo uso del parámetro:

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 9/23

Page 10: Leandro Tuttini Blog_ Crystal Reports

Seguramente cuando se acepte el dialogo, mostrara el mensajepidiendo el ingreso de un valor al parámetro creado, se puedeingresar un valor cualquiera, o simplemente aceptar.

En cualquier momento la consulta escrita podrá ser modificada.

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 10/23

Page 11: Leandro Tuttini Blog_ Crystal Reports

En cualquier momento la consulta escrita podrá ser modificada.

Luego de arrastrar los campos al diseñador del Crystal, podríavisualizarse algo como lo siguiente:

En el “Field Explorer” se puede inspeccionar tanto los camposde la consulta, como los parámetros definidos para el reporte.

Pasaje de parámetros desde código

Al momento de ejecutar la aplicación será necesario pasarle alreporte desde el código el filtro que se ha definido, sino sehace seguramente el propio Crystal desplegara un cuadropidiendo el ingreso de un valor.

En el siguiente código se muestra como llevar a cabo esta

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 11/23

Page 12: Leandro Tuttini Blog_ Crystal Reports

En el siguiente código se muestra como llevar a cabo esta

operación:

[C#] [VB.NET]

01.02.03.04.05.06.07.

08.09.10.11.

12.13.

14.15.16.17.18.19.20.

21.22.23.24.

25.26.

27.28.29.30.31.32.33.34.35.36.

37.

38.39.40.41.42.43.44.

private void Form1_Load(object sender, EventArgs e){

//// Creo el parametro y asigno el nombre//ParameterField param = new

ParameterField();param.ParameterFieldName = "CargoParam";

//// creo el valor que se asignara al

parametro//ParameterDiscreteValue discreteValue = new

ParameterDiscreteValue();discreteValue.Value = "Developer";param.CurrentValues.Add(discreteValue);

//// Asigno el paramametro a la coleccion//ParameterFields paramFiels = new

ParameterFields();paramFiels.Add(param);

//// Asigno la coleccion de parametros al

Crystal Viewer//crystalReportViewer1.ParameterFieldInfo =

paramFiels;

//// Creo la instancia del reporte//crListado report = new crListado();

//// Cambio el path de la base de datos//string rutadb =

Path.Combine(Application.StartupPath,"TestDb.mdb");

report.DataSourceConnections[0].SetConnection("", rutadb, false);

//// Asigno el reporte a visor//crystalReportViewer1.ReportSource = report;

}

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 12/23

Page 13: Leandro Tuttini Blog_ Crystal Reports

[csharp] WinCr… [vb.net] WinCr…

Publicado por Leandro Tuttini en 11:51 17 comentarios

Etiquetas: Crystal Reports

domingo 2 de mayo de 2010

[Crystal Reports] - Exportar DataGridView aCrystal

Introducción

Comúnmente cuando uno confecciona un reporte la informaciónque se usara proviene de una tabla o consulta a una base dedatos, pero suele suceder que a veces se necesite informaciónde orígenes distintos, como ser el caso de controles del propioformulario, donde el usuario cargado información.

Este el caso planteado en el articulo, como generar un reporteen Crystal Reprots, pero utilizando información que no seencuentra en una base de datos, sino que esta aun contenidaen los controles del formulario, no hay una tabla a la cual sepuede vincular el reporte.

Para resolver este problema se hará uso de DataSet Tipados,los cuales no solo brindaran el esquema necesario para definir laestructura de datos que usara el reporte, sino que además serácontenedor de los datos que luego se asignaran como origen dedatos.

Información Adicional

Como referencia adicional podría mencionar dos excelenteartículos que han sido de mucha ayuda, los cuales detallan muybien como hacer uso de los reportes vinculados a DataSetTipados, pero en este caso si toman la información medianteuna consulta a la db.

Informes Crystal Reports

Creación de Reportes con Crystal Reports en Visual Studio2005/2008

Creación del reporte

Uno de los primeros paso consiste en la creación del reporte,para el mismo es necesario definir los datos o mejor dicho elesquema de los mismos, tarea que será responsabilidad delDataSet Tipado.

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 13/23

Page 14: Leandro Tuttini Blog_ Crystal Reports

Es por ello que en el ejemplo podrán ver un archivo de nombredtCompra.xsd, este es precisamente el DataSet que se usaraen el reporte y definirá la estructura de datos del mismo.

En este se han creado manualmente dos DataTable querepresentan los datos del cliente y los ítems que haseleccionado en la compra.

Ambas tablas se han creado de forma manual, arrastrando losdatatable de la toolbox de la izquierda, y luego agregando suscolumnas. Al no existir base de dato alguna, es necesario crearestas de forma manual, no se tiene ayuda del “SolutionExplorer” para arrastrar tablas y crearlas dinámicamente,justamente porque no existen.

Una vez creado el esquema de los datos se procede con elreporte, para ello se agrega uno nuevo en el proyecto, en estecaso con el nombre de Factura.rpt, y se configuran los datosmediante la opciones del “Field Explorer”, agregando el origende datos, como muestra la imagen:

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 14/23

Page 15: Leandro Tuttini Blog_ Crystal Reports

Del cuadro de dialogo siguiente se selecciona el DataSet creadoen el paso previo:

Por ultimo, el asistente de Crystal permitirá redefinir como sevinculan las tablas, en este caso por representar información adistinto nivel no existe una relación, pero si se desarrollaraalgún reporte del estilo maestro-detalles, podría existir unvinculo entre las tablas.

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 15/23

Page 16: Leandro Tuttini Blog_ Crystal Reports

Una vez concluidos los pasos para configurar el esquema dedatos del reporte, arrastrando los campos al reporte, podríaarmar un reporte similar a este:

Carga de los datos en el DataSet Tipado

El siguiente paso consiste en volcar la información ingresadapor el usuario en los controles al dataset tipado, creando endtComrpas.xsd

Para esto se codifico un método responsable de esta tarea:

01.02.03.04.05.06.07.

private dtCompra GenerarFactura(){

dtCompra facturacion = new dtCompra();

//// Agrego el registro con la info del cliente//

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 16/23

Page 17: Leandro Tuttini Blog_ Crystal Reports

Este método es fundamental ya que será el encargado decargar los datos en una instancia del dataset tipado, para ellotomara el contenido de los controles y los agregara comoregistros en el DataTable que corresponda.

Es de apreciar como opera con el DataGridView, recorriendocada fila del mismo, tomando los valores de sus celdas ycreando nuevos registros en el datatable que representa lasCompras.

Visualización del Reporte

Una vez que tenemos los datos cargados en una instancia delDataSet, solo queda asignarlos como origen de datos delreporte.

Para esta operación el reporte será mostrador en un formularioespecialmente creado para tal fin.

Pero hay un detalle, los datos han sido creado en un formulariodistinto, es por eso usa la técnica por medio del constructorpara pasar la información de un formulario a otro. Esto podrávisualizarse en el formulario frmVisorFactura.

07.

08.

09.10.11.12.13.14.

15.16.17.

18.19.20.21.22.

23.

24.

25.

26.27.28.29.30.31.32.

//

dtCompra.DatosClienteRow rowDatosCliente =facturacion.DatosCliente.NewDatosClienteRow();

rowDatosCliente.Nombre = txtNombre.Text;rowDatosCliente.Direccion = txtDireccion.Text;rowDatosCliente.Telefono = txtTelefono.Text;rowDatosCliente.DNI = txtDni.Text;

facturacion.DatosCliente.AddDatosClienteRow(rowDa

tosCliente);

//// Itero por cada fila del DataGridView creando

el registro// en el DataTabla//foreach (DataGridViewRow row in dgvCompras.Rows){

dtCompra.ComprasRow rowCompra =facturacion.Compras.NewComprasRow();

rowCompra.Descripcion =Convert.ToString(row.Cells["Descripcion"].Value);

rowCompra.PrecioUnitario =Convert.ToInt32(row.Cells["PrecioUnitario"].Value);

rowCompra.Cantidad =Convert.ToInt32(row.Cells["Cantidad"].Value);

facturacion.Compras.AddComprasRow(rowCompra);

}

return facturacion;}

01.02.03.

public partial class frmVisorFactura : Form{

dtCompra _datosreporte;

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 17/23

Page 18: Leandro Tuttini Blog_ Crystal Reports

Allí se ha agregado un constructor que acepta como parámetroel dataset que requiere el reporte para visualizarse.

También puede verse como en el evento Load se hace uso delos datos pasados al formulario y como son asignados alDataSource de la instancia del reporte.

Desde el frmCompra (donde el Usuario de la aplicación ingresalos datos), solo basta con invocar al formulario de la siguientemanera:

En al primer línea se invoca al método que carga la estructurade datos, y en las siguiente se crea la instancia del formularioque contienen el control Crystal Report Viewer, al cual se lepasa en el constructor la información a visualizar.

Hay que remarcar en este punto el porque de todo esta lógicaen al comunicación de los formularios. Resulta que uno de elloses el que contiene la información y el otro es el que permite lavisualización, la idea es mantener bien clara la separación deresponsabilidades de cada uno, y no tener que acceder desdeun formulario a los controles del otro, eso no es correcto, perosi se usa un medio que permita la comunicación, como ser eneste caso el dataset tipado ,se puede trabajar en cadaformulario de forma transparente y prolija.

[C#] [VB.NET]

03.

04.05.06.07.08.09.10.11.12.13.14.15.

16.17.18.19.20.21.22.

dtCompra _datosreporte;

private frmVisorFactura(){

InitializeComponent();}

public frmVisorFactura(dtCompra datos): this(){

_datosreporte = datos;}

private void frmVisorFactura_Load(object sender,

EventArgs e){

Factura _factura = new Factura();_factura.SetDataSource(_datosreporte);

crwFactura.ReportSource = _factura;

}}

1.

2.3.4.5.6.7.

private void btnReporte_Click(object sender,EventArgs e)

{dtCompra datos = GenerarFactura();

frmVisorFactura frm = new frmVisorFactura(datos);frm.Show();

}

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 18/23

Page 19: Leandro Tuttini Blog_ Crystal Reports

[csharp]GrillaE… [vb.net]GrillaE…

Publicado por Leandro Tuttini en 16:26 22 comentarios

Etiquetas: Crystal Reports

sábado 12 de diciembre de 2009

C# – Crystal Reports – Usar DataSet Tipado condos DataTable

Introducción

La finalidad de este articulo es muy puntual e intentarademostrar como hacer uso en un reporte de Crystal un DataSetTipado que contiene dos DataTable en su interior.

En este caso se necesita listar los contactos de una empresa,pero para ello no solo se debe contar con los datos de loscontactos, sino que además se desea enviar en el mismo origende datos la información de la empresa.

Para esta operación es que se hace uso de un mismo DataSetTipado, pero este contendrá dos tablas, las cuales seráncargadas de forma independiente, pero todo el conjunto seráenviado como DataSource al reporte.

Para la operación se carga del dataset es que se ha creado unmétodo que permite bajo la misma conexión cargar ambastablas

01.

02.03.

04.05.06.

07.08.09.10.11.12.13.14.15.16.17.

public static dtoContactosEmpresaGetContactosEmpresa()

{dtoContactosEmpresa dtContactosEmpresa = new

dtoContactosEmpresa();

using (OleDbConnection conn = newOleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))

{

#region Cargo Datos Empresa

string sql = @"SELECT IdEmpresa,RazonSocial,Telefono,Direccion,CUIT

FROM Empresas";

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 19/23

Page 20: Leandro Tuttini Blog_ Crystal Reports

Es importante remarcar como al hacer el Fill() de los datos seespecifica el nombre del datatable donde se quiere volcar lainformación (líneas 22 y 42)

[C#]

[csharp]WinCr…

[VB.NET]

[vb.net]WinCry…

Publicado por Leandro Tuttini en 08:17 0 comentarios

Etiquetas: C#, Crystal Reports

sábado 3 de octubre de 2009

C# - Crystal Reports – Sumatoria Condicional(Conditional Sum)

Introduccion

17.18.

19.20.

21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.

OleDbCommand command = new OleDbCommand(sql,

conn);

OleDbDataAdapter da = newOleDbDataAdapter(command);

da.Fill(dtContactosEmpresa, "DatosEmpresa");

#endregion

#region Cargo Contactos

sql = @"SELECT Nombre

,Apellido,FechaNacimiento,Localidad,Calle,Numero,Mail

FROM Contacto";

command = new OleDbCommand(sql, conn);

da = new OleDbDataAdapter(command);

da.Fill(dtContactosEmpresa, "Contactos");

#endregion

}

return dtContactosEmpresa;}

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 20/23

Page 21: Leandro Tuttini Blog_ Crystal Reports

Cuando se rrqyuiere trabajar con Crystal en la creadion de

reportes un punto interesante es poder agregar condiciones alos campos de agregacion, como se una sumatoria al final de lapagina, para ello tenemos herramientas en Crystal queutilizaremos en este ejemplo

Desarrollo

Para el ejemplo haremos uso de un ambiente simple en dodnetendremos una lista de usuarios y sus asistencias adeterminado evento.

Para ello ene le ejemplo se hara uso como origen de datos unDataSet Tipado, el cuals era cargado en este caso de formamanual, pero bien podria hacerse accediendo a una base dedatos

Como proximo paso se creara el reporte agregando a la seccionde detalle los campos definidos en el DataSet.

Una vez que tenomos el reporte armado, se procedera a lacreacion del campo de sumatoria, para ello se realzia un clicksobre el campos al cual se le quiere aplicar la suma y seselecciona Insert –> Running Total …

En el dialogo que se visualizara se podra cambiar el nombre eneste caso se utilizo “AsistenciasTotal”, y la parte masimportante sera definir la formula que usara, para ello se deberautilizar la opcion que dice “Use a formula”

Al presionarla se visualizara otro cuadro en donde se introducirala formua que es requerida en este caso filtraremos por unnombre, por ejemplo “Carlos”, por sultimo se acepta el cuadrocon el boton superior “Save and close”.

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 21/23

Page 22: Leandro Tuttini Blog_ Crystal Reports

Cuando se acepte el ultimo cuadro seguramente los campospueden quedar ensimados, pera solucionarlo solo hace faltamoverlos, ubicandolos donde sea requerido.

El reporte final, luego de ubicar correctamente lso campos,quedara de esta forma:

Y al ejecutarlo el resultado sera el siguiente:

Debe notarse ademas que si se visualiza el “Field Explorer” seencontrara el campo de sumatoria recien creado.

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 22/23

Page 23: Leandro Tuttini Blog_ Crystal Reports

Entradas más recientes Entradas antiguas

[C#] Descarga

Publicado por Leandro Tuttini en 13:40 5 comentarios

Etiquetas: Crystal Reports

Página principal

Suscribirse a: Entradas (Atom)

22/05/2011 Leandro Tuttini Blog: Crystal Reports

ltuttini.blogspot.com/…/Crystal Reports 23/23