29
Creación de informes con imágenes dinámicas en Crystal Reports con C# Manual para crear informes de crystal con imágenes cuya ruta puede variar o depender de una base de datos usando C#. Fecha: 17/Ago/2006 (17-08-06) Autor: Albert De Nova- ([email protected]) Introducción Este es mi primer tutorial, así que si tienen alguna duda, sugerencia o hay errores no duden en mandarme un correo, espero que no me decapiten después de leer esto. En este artículo intentaré explicarles como generar reportes a través de Crystal Reports que contengan imágenes que puedan variar según la ruta de la base de datos o simplemente su ruta de archivo puede ser relativa, el lenguaje que usaré para este tutorial es C#. Existe por ahí algún tutorial para hacer-lo en VB.Net, por eso lo escribo en este lenguaje. Creando el Dataset En este caso les voy a poner un proyecto que ya icé (así me ahorro faena jejej) pero que se adapta perfectamente para la realización de este tutorial. El primer paso es crear un Dataset. Para los que no sepan, tienen que ir donde tiene el proyecto a mano derecha, y en donde sale el nombre del proyecto pulsar botón derecho>Agregar>Agregar nuevo elemento... y allí seleccionan el Dataset, en mi caso le puse el nombre: imprimirinform.xsd.

Creación de informes con imágenes dinámicas en Crystal Reports con C

Embed Size (px)

DESCRIPTION

un como crear un repporte con imágenes

Citation preview

Page 1: Creación de informes con imágenes dinámicas en Crystal Reports con C

Creación de informes con imágenes dinámicas en Crystal Reports con C# Manual para crear informes de crystal con imágenes cuya ruta puede variar o depender de una base de datos usando C#.

 

Fecha: 17/Ago/2006 (17-08-06)Autor: Albert De Nova- ([email protected])

 

Introducción

Este es mi primer tutorial, así que si tienen alguna duda, sugerencia o hay errores no duden en mandarme un correo, espero que no me decapiten después de leer esto.

En este artículo intentaré explicarles como generar reportes a través de Crystal Reports que contengan imágenes que puedan variar según la ruta de la base de datos o simplemente su ruta de archivo puede ser relativa, el lenguaje que usaré para este tutorial es C#. Existe por ahí algún tutorial para hacer-lo en VB.Net, por eso lo escribo en este lenguaje.

Creando el Dataset

En este caso les voy a poner un proyecto que ya icé (así me ahorro faena jejej) pero que se adapta perfectamente para la realización de este tutorial. El primer paso es crear un Dataset. Para los que no sepan, tienen que ir donde tiene el proyecto a mano derecha, y en donde sale el nombre del proyecto pulsar botón derecho>Agregar>Agregar nuevo elemento... y allí seleccionan el Dataset, en mi caso le puse el nombre: imprimirinform.xsd.

Page 2: Creación de informes con imágenes dinámicas en Crystal Reports con C
Page 3: Creación de informes con imágenes dinámicas en Crystal Reports con C

Una vez creado el Dataset nos aparecerá una ventana con un color ocre, en el que te saldrá un texto en medio, veras que tiene destacada la palabra explorador de servidores, úsala para seleccionar la base de datos, de esa forma podrás agregar fácilmente una tabla idéntica a la que hay en la base de datos (que estará vacía, pero servirá para linkear el reporte al dataset, posteriormente enseñaré como llenar el Dataset, no os asustéis :p). En mi caso, la tabla se llama Premsa, y la base de datos se llama tr.mdb. Una vez seleccionamos la base de datos, la abrimos con el símbolo + y seleccionamos la tabla que queremos usar y la arrastramos a la pantallita ocre, de esa manera nos saldrá un cuadrado con las tablas y el tipo de tablas que son.

Una vez agregada la tabla al Dataset hay que hacer una cosa muy importante para realizar bien el tutorial, en mi caso, el campo Noticia contiene la ruta de la imagen. Como se puede ver es de tipo String, pues bien, para poder mostrar la imagen el el reporte lo tenemos que cambiar a base64Binary.

Page 4: Creación de informes con imágenes dinámicas en Crystal Reports con C

Una vez hecho esto ya tenemos el DataSet creado, ya lo podemos guardar, ahora nos vamos a crear el informe en crystal report.

Creando el informe en Crystal Report de VS.Net 2003

Para crear el informe, volveremos a hacer el primer paso que realizamos con el Dataset, Boton derecho>Agregar>Agregar nuevo elemento... Pero esta vez seleccionaremos el objeto de Crystal Reports. En mi caso se llamará imprimir.rpt.

Una vez creado seleccionaremos la opción que debemos crear (yo seleccioné crear informe en blanco, me gusta mas para poderlo crear como yo quiera). De todas formas, si elijes crear informe en blanco, cuando

Page 5: Creación de informes con imágenes dinámicas en Crystal Reports con C

estés en el reporte (en blanco claro jajaja), pulsa Boton derecho>Bases de Datos>Agregar o quitar bases de datos. Y te saldrá algo como en la foto de abajo, a los que lo creen de otra manera, cuando les diga que agreguen la base de datos, hagan lo siguiente:

Page 6: Creación de informes con imágenes dinámicas en Crystal Reports con C

Es decir, nos iremos a Datos del proyecto, seleccionaremos donde pone DataSets, y seleccionaremos el Dataset que hemos creado antes, y le aremos click normal, luego pulsaremos en donde están las dos flechas >> para agregar el Dataset con su tabla al informe. Luego, una vez creado el informe, (en mi caso ya veréis como ha quedado) agregamos el campo que contiene la foto, y..sorpresa, es un campo cuadrado, mas grande que el resto, bueno esto es porque contiene las fotos. Una vez creado el reporte, en el campo de las fotos..le damos click con el Botón derecho y le apretamos a Formato..

Page 7: Creación de informes con imágenes dinámicas en Crystal Reports con C

Una vez hecho esto, nos aparecerá una ventana donde debemos apretar en PUEDE CRECER. Inicialmente estará desmarcada, la debemos marcar para que si la foto es mas grande que el cuadrado, se muestre entera, de otra forma la imagen se reduciría al tamaño del cuadrado. Mira la imagen de debajo si no te queda claro.

Page 8: Creación de informes con imágenes dinámicas en Crystal Reports con C

Una vez hecho esto ya tendremos el Informe creado, ahora vamos a llenar el DataSet.

Llenando el DataSet desde el form

Crearemos 2 Forms, uno con un botón y otro con un CrystalReportViewer en él.

Bueno aquí empieza la diversión, Crystal Report no admite que le pasemos la ruta de la imagen con el .JPG, .GIF, .PNG o lo que sea, ni tampoco que le pasemos la imagen en si abriéndola antes, por lo que la tenemos que pasar a binario, (no os asustéis, es fácil). Para ello creamos la función ConversionImagen, en la que indicamos la ruta de la imagen y la pasamos a Byte. La función es la siguiente:

public static byte[] ConversionImagen(string nombrearchivo)

{

//Declaramos fs para poder abrir la imagen.

FileStream fs = new FileStream(nombrearchivo, FileMode.Open);

// Declaramos un lector binario para pasar la imagen

Page 9: Creación de informes con imágenes dinámicas en Crystal Reports con C

// a bytes

BinaryReader br = new BinaryReader(fs);

byte[] imagen = new byte[(int)fs.Length];

br.Read(imagen,0,(int)fs.Length);

br.Close();

fs.Close();

return imagen;

}

Lo que hace esta función es obtiene la ruta de la imagen (ahora os mostrare como se la damos) y la pasa a binario, devolviendo un valor byte[] que será el que se agregara al dataset.

Para llenar el Dataset, en lugar de usar el famoso Fill(dataset, tabla), no lo usaremos ya que tenemos que modificar algunos datos antes de mandarle los datos al Dataset. Para hacerlo agregamos un OleDbDataAdapter (si estas usando access claro), y lo conectamos con la base de datos que va a contener las noticias. Luego en el evento click del botón, vamos a realizar la conexión a la base de datos, y por cada dato que leamos (usando un Read() del executereader) le iremos agregando los valores al Dataset.

private void button1_Click(object sender, System.EventArgs e)

{

//instanciamos el datatable, datarow i dataset

DataTable dt = new DataTable("Premsa");

DataRow dr;

DataSet rs = new DataSet("imprimirinform");

//creamos las mismas columnas que hay en el dataset

dt.Columns.Add("Titular", System.Type.GetType("System.String"));

dt.Columns.Add("Data", System.Type.GetType("System.DateTime"));

dt.Columns.Add("Diari", System.Type.GetType("System.String"));

dt.Columns.Add("Resum", System.Type.GetType("System.String"));

dt.Columns.Add("Àmbit", System.Type.GetType("System.String"));

dt.Columns.Add("ID", System.Type.GetType("System.Int32"));

/*

* ahora en Noticia (donde ira la imagen),

* le decimos que el campo sera System.Byte[] ia que

* contendra el byte[] obtenido en la funcion ConversionImagen

*/

dt.Columns.Add("Noticia", System.Type.GetType("System.Byte[]"));

//abrimos la conexion

Page 10: Creación de informes con imágenes dinámicas en Crystal Reports con C

objConectar1.Open();

OleDbCommand comando = new OleDbCommand("Select * From Premsa", objConectar1);

//creamos el data reader

OleDbDataReader linia;

linia = comando.ExecuteReader();

//mientras el datareader sea true, ira realizando el bucle

while(linia.Read())

{

//se instancia datarow.

dr = dt.NewRow();

/*

* dr["titulocampo"], con esto le decimos que

* en la fila que esta creando, en la columna

* titular, o lo que sea, le asigne un valor

* el linia.valor (si es string, int, datetime...)

* y lo que hay entre () es la id del campo, se empieza desde 0

*/

dr["Titular"] = linia.GetString(0);

dr["Data"] = linia.GetDateTime(1);

dr["Diari"] = linia.GetString(2);

dr["Resum"] = linia.GetString(3);

dr["Àmbit"] = linia.GetString(4);

dr["ID"] = linia.GetInt32(5);

/*

* En el caso de la noticia la cosa canvia, le pasamos

* el valor del campo de la bd (ruta de la imagen) a

* la funcion ConversionImagen, que devolvera un byte[]

* que sera lo que se inserte en el DataSet, asi

* el datareport nos mostrara la imagen tal como debe

*/

dr["Noticia"] = ConversionImagen(linia.GetString(6));

//añadimos la fila al dl datatable

dt.Rows.Add(dr);

Page 11: Creación de informes con imágenes dinámicas en Crystal Reports con C

}

//cerramos el datareader y la conexión

linia.Close();

objConectar1.Close();

//añadimos la tabla al dataset

rs.Tables.Add(dt);

//iniciamos el form y el reporte

Form2 form = new Form2();

imprimir report = new imprimir();

//le indicamos el datasource al report, que sera el recordset

//que hemos llenado

report.SetDataSource(rs);

//le indicamos el reportsource al crviewer del segundo form

//que sera el report que creamos

form.crystalReportViewer1.ReportSource = report;

//mostramos el 2ndo form

form.Show();

}

Una vez puesto esto en el botón y agregado el crystalReportViewer ya tenemos el proyecto terminado, al ejecutar el programa y pulsar el botón, el report se llenara con las imágenes y todo, y ya nos funcionará, el sistema esta puesto para que las imágenes se vean al 100%, en mi caso como tenían diferentes tamaños las tuve que redimensionar todas usando el photoshop, pero bueno, al final te acostumbras después de hacer 150 artículos jajajaj. Aquí les dejo como queda finalmente el reporte una vez ejecutado el CRViewer:

Page 12: Creación de informes con imágenes dinámicas en Crystal Reports con C

Nota:Siempre puedes configurar el CRViewer como tu quieras, yo lo configuré a mi manera porque es el que usé para el proyecto, que era para realizar la impresión de unos artículos de prensa, aunque he usado el mismo proyecto, los textos están en catalán, porque lo tenia que hacer así, si a alguien le resulta mucho problema por alguna razón que me lo comente y haré lo posible para cambiarlo al castellano si lo prefieren, un saludo y gracias por su atención.

Espacios de nombres usados en el código de este artículo:

System; System.Drawing;System.Collections;System.ComponentModel;System.Windows.Forms;System.Data;System.Data.OleDb;System.IO;

 

Page 13: Creación de informes con imágenes dinámicas en Crystal Reports con C

Informes Crystal ReportsFecha: 10/Feb/2005 (09/02/2005)Autor: Juan Gabriel Castillo Turrubiates [email protected]

 

     En esta ocasión veremos la manera de mostrar un reporte sencillo. La apariencia final de nuestra aplicación será la siguiente:

 

Al presionar el botón Imprimir, se abrirá la siguiente pantalla:

Page 14: Creación de informes con imágenes dinámicas en Crystal Reports con C

Nuestro proyecto de llama proReportes, y deberá quedar organizado de la siguiente manera:

Utilizamos una base de datos llamada dbPrac.mdb, la cual contiene una tabla llamada CAT_CLIENTES. En el archivo adjunto viene tal base de datos. Por adelantado te digo que esta conformada (la tabla) de la siguiente manera:

 

Campo Tipo Descripción

ID_CLIENTE TEXTO Campo llave

PATERNO Texto Apellido paterno

Page 15: Creación de informes con imágenes dinámicas en Crystal Reports con C

MATERNO Texto Apellido materno

NOMBRE Texto Nombre

RFC Texto RFC

DIRECCION Texto Dirección

TELEFONO Texto Telefono

LIM_CRED Doble Límite de crédito

Al formulario frmCatClientes, le agregamos 8 TextBox y 8 Label, con las siguientes características:

Objeto(nombre) Tipo Propiedad Valor

txtID_CLIENTE TextBox Text (vacío)

txtPATERNO TextBox Text (vacío)

txtMATERNO TextBox Text (vacío)

txtNOMBRE TextBox Text (vacío)

txtRFC TextBox Text (vacío)

txtDIRECCION TextBox Text (vacío)

txtTELEFONO TextBox Text (vacío)

txtLIM_CRED TextBox Text (vacío)

lblID_CLIENTE Label Text Clave

lblPATERNO Label Text Paterno:

lblMATERNO Label Text Materno:

lblNOMBRE Label Text Nombre:

lblRFC Label Text RFC

lblDIRECCION Label Text Dirección:

lblTELEFONO Label Text Teléfono:

lblLIM_CRED Label TExt Límite de crédito

Images ImageList

barBotones ToolBar

Agrega imágenes al ImageList y botones al ToolBar (que se parezcan a las arriba mostradas). En el archivo adjunto incluiré las imágenes (en realidad son iconos) que utilice para este ejemplo. 

Agrega también un MainMenu como se muestra:

Page 16: Creación de informes con imágenes dinámicas en Crystal Reports con C

Al formulario frmReportes, agrega un CrystalReportViewer y ponle como nombre crvReportes, y el la propiedad Dock del Viewer selecciona Fill. El formulario debe quedar como se muestra:

Ahora agregaremos un DataSet, este nos servirá para enlazar nuestro reporte con los datos. Pon mucha atención a lo que a continuación se muestra:

1. Agrega un nuevo elemento(DataSet ):

Page 17: Creación de informes con imágenes dinámicas en Crystal Reports con C

Aparece algo como lo siguiente:

2. Selecciona Explorador de Servidores.

3. Con el botón derecho del mouse, sobre Conexiones de datos, selecciona Agregar conexión...

Page 18: Creación de informes con imágenes dinámicas en Crystal Reports con C

4. Conéctate a la base de datos de Access:

5. Después de lo anterior, aparece (más o menos) así el Explorador de servidores:

6. Expande la conexión (tal como se muestra en la figura) y arrastra la tabla CAT_CLIENTES como se muestra:

Page 19: Creación de informes con imágenes dinámicas en Crystal Reports con C

7. Cierra el Explorador de servidores, graba los cambios y ¡listo!, terminamos el DataSet.

Ahora crearemos nuestro reporte:

1. Agrega un nuevo elemento al proyecto (CrystalReports ). Pon el nombre rptCatClientes y presiona Abrir:

2. Selecciona Mediante el asistente de informes y presiona Aceptar:

Page 20: Creación de informes con imágenes dinámicas en Crystal Reports con C

3. Expande como se muestra a continuación:

4. Selecciona la tabla CAT_CLIENTES y presiona el botón Insertar tabla. Presiona Siguiente.

Page 21: Creación de informes con imágenes dinámicas en Crystal Reports con C

5. Agrega todos los campos (con el botón Agregar). Ve a la casilla Estilo, escribe el título del reporte (Catalogo de Clientes) y presiona Finalizar.

Ahora vamos a programar ...

Código:

Primero el código de clsMain:

Public Class clsMain ''Esta es la cadena de conexión ''Es necesaria para obtener conectividad con la base de datos Public CnnStr As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=..\Data\dbPrac.mdb;" & _ "Persist Security Info=False "End Class

Después del código del formulario (frmCatClientes):

''Programador: JUAN GABRIEL CASTILLO TURRUBIATES(poner tu nombre)'' las instrucciones Imports, van antes de cualquier otra instrucciónImports System.Data.OleDbImports CrystalDecisions.CrystalReports.EnginePublic Class frmCatClientes Inherits System.Windows.Forms.Form ''una instancia a la clase clsMain Dim miClsMain As New clsMain() ''Declaramos una conexión Dim cnnCatClientes As New OleDbConnection(miClsMain.CnnStr) ''Declaramos un Comando Dim cmdCatClientes As New OleDbCommand("SELECT * " & _

Page 22: Creación de informes con imágenes dinámicas en Crystal Reports con C

"FROM CAT_CLIENTES", cnnCatClientes) ''Declaramos un Data Adapter Dim daCatClientes As New OleDbDataAdapter(cmdCatClientes) ''Un DataSet Dim dsCatClientes As New DataSet() ''''y por último, el importantísimo Command Builder Dim cbCatClientes As New OleDbCommandBuilder(daCatClientes) Private Sub frmCatClientes_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Inicializar() HabilitaBotones(True) HabilitaCaptura(False) End Sub Private Sub Imprimir() Try 'Código para mostrar el reporte 'Lo primero que hacemos es declarar una instancia 'del data set dsRepCatClientes Dim mi_dsRepCatclientes As New dsRepCatClientes() 'Lo llenamos con el contenido de la tabla CAT_CLIENTES daCatClientes.Fill(mi_dsRepCatclientes, "CAT_CLIENTES") 'Declaramos una instancia del Reporte Dim mi_rptCatClientes As New rptCatClientes() 'Le indicamos al reporte que tome los datos 'del DataSet mi_rptCatClientes.SetDataSource(mi_dsRepCatclientes) 'Delcaramos una instancia del formulario frmReprotes Dim miForma As New frmReportes() 'Le indicamos que debe mostrar mi_rptCatClientes miForma.crvReportes.ReportSource = mi_rptCatClientes 'que muestre el titulo "Reporte de Clientes" miForma.Text = "Reporte de Clientes" 'Mostramos el formulario (el cual contiene el reporte) miForma.Show() Catch ex As Exception MessageBox.Show(ex.Message, "Imprimir", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Function BuscarRegistro(ByVal prmPos As Integer) As Integer 'Código para buscar un registro 'Recibe como parámetro la posición actual en el DataSet 'para, en el caso de no encontrar el registro solicitado, 'regresar la posición del registro antes de iniciar. 'Lo que hace este procedimiento es 'regresar la posición en la que se encuentra el registro 'solicitado, en caso de no encontrarlo, regresa la posición 'antes de iniciar la búsqueda Try Dim dvCatClientes As DataView = _ New DataView(dsCatClientes.Tables(0), "", _ "ID_CLIENTE", DataViewRowState.CurrentRows) 'Declaramos varID_CLIENTE Dim varID_CLIENTE As String = "" 'Preguntamos la clave del cliente que se desea buscar varID_CLIENTE = InputBox("Introduce la clave a buscar", "Buscar")

Page 23: Creación de informes con imágenes dinámicas en Crystal Reports con C

If Not varID_CLIENTE = "" Then 'Regresamos el index del cliente encontrado Return dvCatClientes.Find(varID_CLIENTE) Exit Function Else 'Si no se especificó el cliente, regresamos la 'posición (index) del cliente original(prmPos) MessageBox.Show("La búsqueda no se puede realizar", _ "Información del sistema", MessageBoxButtons.OK, _ MessageBoxIcon.Information) Return prmPos Exit Function End If Catch ex As Exception 'En caso de error, suponiendo que no se encontró el cliente, 'regresamos la posición original del cliente(prmPos) MessageBox.Show(ex.Message, "Error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) Return prmPos Exit Function End Try End Function Private Sub Actualizar() Try dsCatClientes.Clear() 'Limpiar el DataSet daCatClientes.Fill(dsCatClientes, "CAT_CLIENTES") Catch ex As Exception MessageBox.Show(ex.Message, "Información del sistema", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub Inicializar() Try With cnnCatClientes ''Verificamos el estado de la conexión If .State = 1 Then 'si esta abierta .Close() 'cerramos End If .Open() '' abrimos la conexión End With ''Cargamos el DataSet Con los datos de La tabla daCatClientes.Fill(dsCatClientes, "CAT_CLIENTES") ''Enlazamos los Objetos txtID_CLIENTE.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.ID_CLIENTE") txtPATERNO.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.PATERNO") txtMATERNO.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.MATERNO") txtNOMBRE.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.NOMBRE") txtRFC.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.RFC") txtDIRECCION.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.DIRECCION") txtTELEFONO.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.TELEFONO")

Page 24: Creación de informes con imágenes dinámicas en Crystal Reports con C

txtLIM_CRED.DataBindings.Add("Text", dsCatClientes, _ "CAT_CLIENTES.LIM_CRED") Catch ex As Exception ''Esto ocurriría solo en el caso de que ocurra un error MessageBox.Show(ex.Message, "Info del Sistema", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub Grabar() Try 'Indicamos que termine la edición actual Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").EndCurrentEdit() 'Actializamos la Base de datos daCatClientes.Update(dsCatClientes, "CAT_CLIENTES") HabilitaBotones(True) HabilitaCaptura(False) Catch ex As Exception MsgBox(ex.Source & "; " & ex.Message, _ MsgBoxStyle.OKOnly, "Ocurrió un error") End Try End Sub Private Sub Nuevo() Try 'Indicamos que termine la edición actual Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").EndCurrentEdit() 'Preparamos al DataSet para aceptar un Registro nuevo Me.BindingContext(dsCatClientes, "CAT_CLIENTES").AddNew() HabilitaBotones(False) HabilitaCaptura(True) Catch ex As Exception MsgBox(ex.Source & "; " & ex.Message) End Try End Sub Private Sub Eliminar() ''Este procedimiento es el encargado de eliminar un registro. ''Lo que hacemos es obtener la posición en la que nos encontramos ''Y después eliminamos el registro que se encuentra en esa posición ''Otra manera de eliminar seria ejecutar una instrucción SQL que ''elimine el registro (de acuerdo con la ID_CLIENTE) ''y después ejecutar el procedimiento Inicializar. Dim Resp As String Try Resp = MsgBox("¿Esta seguro de eliminar el registro? " & _ vbCrLf & "Nota: Eliminar registros puede perjudicar " & _ "la ejecución.", MsgBoxStyle.OKCancel, "Eliminar Registro") If Resp = vbOK Then Dim Registro As Integer Registro = Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").Position Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").EndCurrentEdit() Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").RemoveAt(Registro) daCatClientes.Update(dsCatClientes, "CAT_CLIENTES")

Page 25: Creación de informes con imágenes dinámicas en Crystal Reports con C

Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").Position = 0 End If Catch ex As Exception MsgBox(ex.Source & "; " & ex.Message, _ MsgBoxStyle.OKOnly, "Ocurrió un error") End Try End Sub Private Sub Cancelar() Try 'Cancelamos Me.BindingContext(dsCatClientes, _ "CAT_CLIENTES").CancelCurrentEdit() HabilitaBotones(True) HabilitaCaptura(False) Catch ex As Exception MsgBox(ex.Source & "; " & ex.Message, _ MsgBoxStyle.OKOnly, "Ocurrió un error") End Try End Sub Private Sub HabilitaBotones(ByVal Habilitar As Boolean) btnInicio.Enabled = Habilitar btnAnterior.Enabled = Habilitar btnSiguiente.Enabled = Habilitar btnFinal.Enabled = Habilitar btnNuevo.Enabled = Habilitar mnuNuevo.Enabled = Habilitar btnModificar.Enabled = Habilitar mnuModificar.Enabled = Habilitar btnEliminar.Enabled = Habilitar mnuEliminar.Enabled = Habilitar btnBuscar.Enabled = Habilitar mnuBuscar.Enabled = Habilitar btnActualizar.Enabled = Habilitar btnImprimir.Enabled = Habilitar btnGrabar.Enabled = Not Habilitar mnuGrabar.Enabled = Not Habilitar btnCancelar.Enabled = Not Habilitar mnuCancelar.Enabled = Not Habilitar btnSalir.Enabled = Habilitar mnuSalir.Enabled = Habilitar End Sub Private Sub HabilitaCaptura(ByVal Habilitar As Boolean) txtID_CLIENTE.Enabled = Habilitar txtPATERNO.Enabled = Habilitar txtMATERNO.Enabled = Habilitar txtNOMBRE.Enabled = Habilitar txtRFC.Enabled = Habilitar txtDIRECCION.Enabled = Habilitar txtTELEFONO.Enabled = Habilitar txtLIM_CRED.Enabled = Habilitar End Sub Private Sub barBotones_ButtonClick(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) _ Handles barBotones.ButtonClick Select Case barBotones.Buttons.IndexOf(e.Button) Case Is = 0

Page 26: Creación de informes con imágenes dinámicas en Crystal Reports con C

Try Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Position = 0 Catch ex As Exception MsgBox(ex.Source & "; " & ex.Message) End Try Case Is = 1 Try Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Position -= 1 Catch ex As Exception MsgBox(EX.Source & "; " & EX.Message) End Try Case Is = 2 Try Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Position += 1 Catch ex As Exception MsgBox(EX.Source & "; " & EX.Message) End Try Case Is = 3 Try Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Position = _ Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Count - 1 Catch ex As Exception MsgBox(EX.Source & "; " & EX.Message) End Try Case Is = 6 Nuevo() Case Is = 7 'Modificar HabilitaBotones(False) HabilitaCaptura(True) Case Is = 8 Eliminar() Case Is = 9 'Buscar registro Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Position = _ BuscarRegistro(Me.BindingContext(dsCatClientes, "CAT_CLIENTES").Position) Case Is = 10 Actualizar() Case Is = 11 Imprimir() Case Is = 12 Grabar() Case Is = 13 Cancelar() Case Is = 14 'Salir(cerrar el formulario) Me.Close() End Select End SubEnd Class

Page 27: Creación de informes con imágenes dinámicas en Crystal Reports con C

Cualquier duda o comentario, mandame un mail a [email protected]

Espacios de nombres usados en el código de este artículo:

System.Data.OleDbCrystalDesisions.CrystalReports.Engine