Anda di halaman 1dari 27

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- (slopee@gmail.com)

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.
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.
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
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:
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..
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.
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


// 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
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);
}

//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:
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;
Informes
Crystal Reports
Fecha: 10/Feb/2005 (09/02/2005)
Autor: Juan Gabriel Castillo Turrubiates
jgcastillo@uat.edu.mx

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:


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
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:

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 ):


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...
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:
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:


3. Expande como se muestra a continuación:

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


Presiona Siguiente.
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ón
Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Public 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 * " & _
"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")
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")
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")
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
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 Sub
End Class
Cualquier duda o comentario, mandame un mail a jgcastillo@uat.edu.mx

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


System.Data.OleDb
CrystalDesisions.CrystalReports.Engine

Anda mungkin juga menyukai