61541840 poblar un crystal report en visual studio 2008

Upload: lucho-nosoy

Post on 08-Jul-2015

274 views

Category:

Documents


0 download

TRANSCRIPT

Poblar un Crystal Report en Visual Studio 2008

Poblacin de un Crystal Report Crear una aplicacin es tan fcil y tan sencillo, que se nos olvida por completo que no solo es de aprender a manipular y modificar datos. Es por eso que me tome un poquitn de mi tiempo para realizar este pequeo tutorial, el cual tiene como objetivo poblar un Crystal Report. Lo primero que tenemos que hacer es crear un DataSet con las siguientes tablas... Nota: "No voy a dar tanto rodeo para explicar como crear un DataSet y todo esto"

Ya que se tenga el DataSet con los datos y la relacin seguir lo siguiente. Crear un Reporte de CrystalReport, lo pueden hacer desde un asistente o manualmente (Del mismo modo no voy a dar tantos rodeos en esto).

Ya que agregaron el CrystalReport y lo poblaron con los datos que deseen, se tiene que crear un nuevo formulario, en el cual se agregara un CrystalView para que en este se pueda agregar la hoja de reporte o reportes.

Ya que se tiene el CrystalView en el panel de Propiedades hay una propiedad llamada ReportSource el cual enlaza la hoja de reporte antes diseada al CrystalView. Pero no todo termina en esto si lo ejecutan no funcionara porque?... realmente cuando se disea el Reporte solo agregamos los campos que sern rellenados posteriormente, ahora viene esta parte, la que todos les gusta. Codificacin Nota: Agrega este codigo en el formulario en donde se encuentre el CrystalView, esto se realizara en el evento del Load, lo que hara es que recopilara los datos que se deseen y los mostrara en el CrystalView.

Private Sub Crystal_Report_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Primero Creamos los objetos que vamos a utilizar para poblar un DataGridView ' El GridView que esta en el formulario se llama "Datos" ' Error "The value's length for key 'data source' exceeds it's limit of '128'"

' Creamos los componenetes para obtener los datos. Dim CadenaConexion As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename='" _ & My.Application.Info.DirectoryPath & "\BaseDatos.mdf';Integrated Security=True;User Instance=True") Dim DatosDS As New BaseDatosDataSet Dim DatosDAC As New SqlDataAdapter("SELECT * FROM TB_CLIENTE", CadenaConexion) Dim DatosDAP As New SqlDataAdapter("SELECT * FROM TB_PEDIDO", CadenaConexion)

' Utilizamos un TryCatch para capturar un error y asi no pueda afectar a la Base de datos Try ' Abrimos la conexion y poblamos el DataSet y posteriormente cerramos la conexion ' -NOTA- : Recuedo que estoy usando Adaptadores para realizar consultas a la base de datos ' de forma desconectada, para no consumir recursos.

CadenaConexion.Open() DatosDAC.Fill(DatosDS.TB_Cliente) DatosDAP.Fill(DatosDS.TB_Pedido) CadenaConexion.Close()

' Cargamos los datos recolectados en un Crystal Report y lo cargamos al CrystalView Dim miReporte As New RepClientes miReporte.SetDataSource(DatosDS) Me.CrystalReportViewer1.ReportSource = miReporte

' Liberamos memoria DatosDS.Dispose() DatosDAC.Dispose() DatosDAP.Dispose()

Catch ex As Exception MsgBox("Mensaje : " & ex.Message) End Try End Sub

Ya que se tiene hecho todo lo anterior solo falta ver el resultado.

Y por ultimo si quiere filtrar los datos solo es de cambiar las sentencias SQL en los DataAdapterDim DatosDAC As New SqlDataAdapter("SELECT * FROM TB_CLIENTE WHERE CLIENTEID = 2", CadenaConexion) Dim DatosDAP As New SqlDataAdapter("SELECT * FROM TB_PEDIDO WHERE FECHA = '13/02/2008'", CadenaConexion)

y el resultado sera el siguiente:

Creacin de Reportes con Crystal Reports en Visual Studio 2005/2008Este pequeo tutor de como crear un reporte en Crystal Reports desde Visual Studio 2005/2008, lo hago porque he recibido muchas consultas de como hacerlo de la mejor forma, quizs hiera algunas susceptibilidades, pero espero que entiendan que tambin hay otras maneras de hacer las cosas. En primer lugar en este tutor les voy a indicar como crear el reporte de la manera mas larga, pero tambin, es la mejor manera para tener el control total sobre lo que queremos mostrar en el reporte. La manera mas fcil de crear un reporte es agregar al proyecto un nuevo tem de tipo reporte de Crystal Reports, y conectarse a la base de datos desde el explorador de servidores del Visual Studio, seleccionar las tablas y arrastrarlas sobre el diseador del reporte. Si, esta es la manera mas fcil, pero tambin la que mas problemas nos puede dar al momento de empezar a cambiar campos a mostrar o al tratar de agregar una condicin o filtro a los datos que queremos mostrar en el reporte. La anterior es una buena tcnica, siempre y cuando el reporte sea sencillo y detectemos que no tendr cambios. A continuacin describo la manera en yo creo mis reportes tanto para web como para windows. A muchos les parecer mas larga pero les aseguro que no tendrn problemas en el futuro pues tienen todo controlado ustedes. Voy a utilizar un proyecto Windows Forms y una base de datos Sql Server 2008, pero se van a dar cuenta que lo pueden hacer con cualquier tipo de base de datos. No voy a entrar en detalles del tipo de conexin a la base de datos ni las instrucciones para traer los datos. A continuacin muestro la forma con los datos que vamos a utilizar para nuestro reporte:

Bueno la idea de nuestro proyecto es que poder tener un reporte con estos datos, lo primero que vamos a hacer es agregar a nuestro proyecto un objeto dataset, que es el que nos va a servir para poder crear nuestro reporte en Crystal Reports.

Clic derecho en el nombre del proyecto, del men seleccionamos la opcin Add, y luego New Item para que nos aparezca la siguiente pantalla y poder escoger el objeto a adicionar a nuestro proyecto.

Escogemos adicionar un objeto dataset que nos servir como fuente de datos para el reporte y poder crear nuestro reporte como queremos. Le damos un nombre a nuestro dataSet, por lo general yo lo llamo igual que el reporte con el prefijo ds, entonces nuestro dataset se va a llamar dsPersonas.xsd

Al darle clic al boton Add nos muestra la ventana de diseo en la cual vamos a agregar un datatable con sus respectivos campos que son los que necesitamos

para dibujar el reporte. Al estar aqu, damos clic derecho sobre la superficie para poder agregar el datatable :

Nos muestra el datatable creado, podemos cambiar el nombre que coloca por defecto, haciendo clic sobre el nombre y se coloca en modo de edicion para poder cambiarlo.

Para agregar los diferentes campos de nuestro datatable, seguimos los siguientes paso: 1. Clic derecho en el rea de los campos del datatable y los vamos agregando.

2. al seleccionar Agregar Columna:

nos permite colocarle el nombre a la columna, este nombre DEBE ser igual al nombre que vamos a devolver en nuestra consulta SQL a la Base de datos.

3.

En la ventana de propiedades de la

columna que estamos agregando, podemos asignar el tipo de campo y su longitud en caso de ser una cadena ( String) y que sea requerido. Mi recomendacin es

que se apeguen a los mismos tipos de datos que estn definidos en la base de datos. 4. En proceso de agregar los campos necesarios para el reporte:

Si me preguntan si es se pueden agregar campos que no se van a utilizar en el reporte, la respuesta es SI, porque es posible que ya tengamos la consulta realizada que nos sirve para nuestro reporte y solo es crearlo a partir de la consulta que ya existe, y como la consulta nos devuelve datos que no vamos a colocar ene l reporte, de todas formas tenemos que crear esos campos en nuestro datatable. 5. Aqui esta nuestro datatable completo para empezar a generar nuestro reporte:

Quizs me pensaran: es mucho trabajo pero piensen en esto, este sistema si mas tarde necesitan agregar un nuevo campo es simplemente venir agregar el campo y actualizar la fuente de datos del reporte para tener acceso a ese nuevo campo que acabamos de crear, por el otro mtodo, eso no es tan fcil, es mejor agregar el campo y volver a crear el reporte. Aclaracin: yo, particularmente, no he sabido, o no he logrado como hacerlo cuando lo intente. 6. Creamos el reporte en crystal reports, nuevamente clic derecho en el nombre del proyecto, Add, New Item.., en la ventana que aparece, seleccionamos Reporting y escogemos el tipo de reporte Crystal Report:

Asignamos un nombre al reporte que se guarda con la extensin .rpt, y clic al botn Add para crear el reporte en nuestro proyecto.

Aparece la siguiente pantalla para seleccionar el tipo de reporte a crear, en la parte izquierda sealado en el circulo rojo aparece una nueva barra de herramientas con la cual vamos a trabajar al adicionar los campos al reporte, en la parte derecha, he resaltado en el circulo rojo que se agregan al proyecto de manera automtica las referencias necesarias para que funcionen los reporte de Crystal Reports en nuestro proyecto. De la ventana, seleccionamos la segunda opcin, crear un reporte en blanco As a Blank Report

Al darle clic al boton OK de la pantalla anterior nos muestra el reporte en blanco como aparece en la imagen anterior. La seccin de Report Header, colocaremos lo que queremos que aparezca solo en la primera hoja del reporte. En la seccin Page Header, colocaremos los que queremos se muestre en la cabecera de todas las paginas del reporte, aqu colocaremos los ttulos de las columnas, por ejemplo. En la seccin Details, colocaremos el detalle de las columnas del reporte

La seccin Report Footer, es la contraparte de la del Page Header, aqu podramos colocar los nmeros de pagina del reporte, por ejemplo. La seccin Page Footer es la contraparte de Report header. Ya teniendo claro esto, lo siguiente es seleccionar la fuente de datos de nuestro reporte, aqu es donde entra a jugar el dataset que creamos en pasos anteriores, pues no necesitamos tener la conexin a la base de datos abierta para disear nuestro reporte.

Damos Clic derecho en el Field Explorer en la entrada Database Field, al aparecer el men contextual de la imagen seleccionamos Database Expert para ir a seleccionar nuestra fuente de datos.

En esta ventana, expandimos Project Data, luego ADO.NET DataSets, aqu nos van a aparecer todos los dataset que tengamos creados en nuestro proyecto, en nuestro caso solo aparece dsPersonas, que es el que hemos creado en pasos anteriores. Seleccionamos el datatable y damos clic en el botn para pasar los datos a la parte derecha de la ventana en la cual va a exponer los campos del datable para poder incluirlos en nuestro reporte.

Hacemos clic en el botn OK para empezar a disear nuestro reporte. Al hacer esto, ya contamos con los campos del dataset en el Field Explorer:

Ahora simplemente es arrastrar los campos al rea del reporte y colocarlos de la manera como deseamos se vea el reporte.

Seleccionamos la Toolbox (barra de herramientas de crystal) y de all escogemos el control text object y lo arrastramos a la seccin de page header para colocar el titulo del reporte all, en la imagen estn seleccionados en crculos rojos todos los controles mencionados.

Al arrastrar un campo del datatable y soltarlo en la seccin de detalle de manera automtica coloca un control de texto para el titulo del control que acabamos de arrastrar.

Para corregir el texto del titulo, lo seleccionamos, le damos clic derecho al control y escogemos del men la opcin Edit Text Object, lo que nos permite cambiar el texto del titulo.

La imagen nos muestra como queda nuestro reporte, no es el alcance de este tutor, indicar como colocar los diferentes atributos de presentacin grafica del reporte. En nuestro formulario windows (web forms) o en nuestro formulario web (web forms) agregamos un control CrystalReportViewwer , el cual nos servir para mostrar nuestro reporte en pantalla y poder imprimirlo o exportarlo a algn formato como PDF o Excel. En el boton Imprimir de nuestro formulario, el codigo que voy a colocar para ir a la base de datos, realizar la consulta de los datos, colocarlos en un datatable y este datatable pasarlo a la propiedad datasource del reporte. A continuacion el codigo del boton imprimir: Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImprimir.Click Dim oCnn As New OleDbConnection Objeto de conexion a la base de datos Dim daDatos As New OleDbDataAdapter Objeto Adaptador para leer datos de la Base de datos Dim cmdExec As New OleDbCommand objeto comando para ejecutar sentencias sql Dim dtDatos As New DataTable datatable para recibir los datos de la base de datos Dim sbQuery As New StringBuilder StringBuilder para armar cadenas Try oCnn.ConnectionString = "Provider=SQLNCLI10;Server=ralvarado;Database=MiBD;Uid=sa; Pwd=XXX;" oCnn.Open() cmdExec = oCnn.CreateCommand

cmdExec.Connection = oCnn sbQuery.Append("SELECT Consecutivo ") sbQuery.Append(" ,IdentificacionPersona ") sbQuery.Append(" ,TipoPersona ") sbQuery.Append(" ,Grupo ") sbQuery.Append(" ,PrimerNombre ") sbQuery.Append(" ,PrimerApellido ") sbQuery.Append(" ,SegundoApellido ") sbQuery.Append(" ,Sexo ") sbQuery.Append(" ,Profesion ") sbQuery.Append(" ,Direccion1 ") sbQuery.Append(" ,Direccion2 ") sbQuery.Append(" ,TelFijo1 ") sbQuery.Append(" ,TelFijo2 ") sbQuery.Append(" ,TelMovil ") sbQuery.Append(" ,PaginaWeb ") sbQuery.Append(" ,ZonaPostal ") sbQuery.Append(" ,Fax ") sbQuery.Append(" ,Email1 ") sbQuery.Append(" ,Email2 ") sbQuery.Append(" ,FechaNacimiento ") sbQuery.Append(" FROM Persona ") cmdExec.CommandText = sbQuery.ToString daDatos = New OleDbDataAdapter(cmdExec) daDatos.Fill(dtDatos) Dim CrReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument ' Asigno el reporte CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument() CrReport.Load(Application.StartupPath & "\crPersonas.rpt") CrReport.SetDataSource(dtDatos) CrystalReportViewer1.ReportSource = CrReport Catch ex As Exception MessageBox.Show("excepcion: " & ex.Message, "Mostrando Reporte")

End Try End Sub Observen que al llenar los datos en dtDatos, simplemente debo asignarle este objeto al Reporte en su mtodo SetDataSource. Con esto puede ser cualquier base de datos, siempre y cuando los datos correspondan a la estructura del dataset creado como fuente de datos del reporte. Si en algn momento nuestro reporte cambia que hay que agregarle un nuevo campo, simplemente vamos a nuestro dataset y le agregamos el campo, luego vamos al reporte y lo abrimos y verificamos nuestra fuente de datos para que nuestro nuevo campo aparezca en al lista, luego es simplemente incluirlo en el reporte.

Bueno espero haber sido claro en como crear un reporte con Crystal Report y les aseguro que no van a tener problemas al momento de modificaciones en el reporte.