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
No hay comentarios:
Publicar un comentario