Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-1-
DocumentName
OriginAtMargins
PrintController
PrinterSettings
Mtodos
Print
Eventos
BeginPrint
-2-
EndPrint
PrintPage
QueryPageSettings
HasMorePages
MarginBounds
PageBounds
PageSettings
La principal propiedad es Graphics, que a su vez es un objeto que tiene propiedades y mtodos que
permiten crear la salida (grfico) que se desea enviar a la impresora.
En general, para crear una pgina de un documento a imprimir, debemos realizar los siguientes pasos:
1 Crear una instancia del objeto PrintDocument que soporte eventos:
Private WithEvents pdt As New PrintDocument()
2. Construir la pgina a imprimir en el evento PrintPage del objeto PrintDocument, usando los
mtodos de la propiedad Graphics del parmetro PrintPageEventArgs para crear la salida:
Private Sur. CrearPaginalmprimir(ByVal sender As System.Object, _ ByVal e As
System.Drawing.Printing.PrintPageEventArgs) _ Handles pdtMensaje.PrintPage
With e.Graphics
.DrawString(Texto,
Fuente,
Brocha,
PosX,
PosY)
-3PosY)
Nota: El mtodo DrawString permito dibujar textos y el mtodo Drawlmage se usa para
mostrar Imgenes, pero existen ms mtodos grficos.
3. Si desea crear una nueva pgina configurar la propiedad HasMorePages del parmetro
PrintPageEventArgs en True:
e.HasMorePages
= True
Columns
Document
Rows
StartPage
UseAntiAlias
Zoom
Obtiene o establece un valor que indica el tamao con el que aparecern las
pginas.
Mtodos
InvalidatePreview
Eventos
StartPageChanged
-4-
Para realizar un Preview del documento a imprimir usando el control, debemos escribir el siguiente
cdigo:
1. Crear un objeto de tipo PrintPreviewContro:
Dim ppc As New PrintPreviewControl
2.
3.
Demo 65
Esta demostracin tiene por objetivo enserar a crear una pgina a imprimir con un simple mensaje
mediante el objeto PrintDocument y realizar un preview de sta mediante el control
PrintPreviewControl.
El ejemplo trabaja con un simple formulario conteniendo un texto y dos botones donde se debe
ingresar un mensaje, el ; cual se puede ver como saldr impreso mediante el botn "Preview" o
imprimir mediante el botn "Print".
Para ver la demostracin debemos realizar los siguientes pasos:
1. Crear una Aplicacin Windows en Visual Basic .NET llamada Demo65.
2. En la ventana del explorador de soluciones seleccionar el archivo Form 1 y en la ventana de
propiedades cambiar la propiedad FileName a frmlmpresion.
3. En el diseador de formularios Windows, arrastrar 1 control Label, 1 TextBox, 2 Button y 1
PrintDocument, luego configurar las propiedades, tal como se muestra en el siguiente cuadro:
Objeto
Propiedad
Valor
Form1
Name
frmImpresion
FormBorderStyle
FixedSingle
MaximizeBox
False
MinimizeBox
False
Size
Width=300,Height=300
StartPosition
CenterScreen
Text
Label1
TextBox1
-5-
Name
lblMensaje
AutoSize
True
Location
X=16, Y=12
Text
Mensaje a imprimir
Name
txtMensaje
Location
Hand
Multiline
True
ScrollBars
Vertical
Size
Text
Button1
Name
btnPreview
Cursor
Hand
Location
X=16,Y=236
Size
Width=75 Height=23
Text
Button2
Name
btnPrint
Cursor
Hand
Location
X=204,Y=236
Size
Width=75 Height=23
Text
PrintDocument
Name
pdtMensaje
Nota: En el cdigo anterior las variables X e Y son usadas para imprimir el texto a partir del
margen actual.
6. Crear el procedimiento de evento PreviewConControl, que controle el evento "Click" del botn
"btnPreview" y escribir el siguiente cdigo:
Private Sub PreviewConControl(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPreview.Click
Dim ppcMensaje As New PrintPreviewControl()
-6-
With ppcMensaje
.Document = pdtMensaje
.Dock = DockStyle.Fill
.Zoom = 2
End With
Dim frmPreview As New Form()
With frmPreview
.Controls.Add(ppcMensaje)
.Text = "Preview con el PrintPreviewControl"
.WindowState = FormWindowState.Maximized
.ShowDialog()
End With
End Sub
Nota: En el cdigo anterior se configura la propiedad Zoom a 2 (200%) para que se muestre el texto un
poco ms grande en el preview y se aprecie mejor.
Crear el procedimiento de evento ImprimirDocumento, que ocurra en el evento "Click' del botn
"btnPrint" y escribir el siguiente cdigo:
Private Sub ImprimirDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrint.Click
pdtMensaje.Print()
End Sub
Nota: El mtodo Print permite enviar la salida de la pagina creada en el evento PrintPage y vista en el
Preview a la impresora.
10. Escribir un texto cualquiera en el cuadro de texto y clic en el botn "Preview" para ver como
aparecer la salida.
-7-
11. Cierre la ventana del Preview y luego si tiene una impresora instalada clic en el botn "Print"
para realizar la impresin.
12. Finalmente, cierre la ventana para salir de la aplicacin
CODIGO del formulario frmPreview del Demo65
-8-
Demo 66
Esta demostracin tiene por objetivo ensear a crear una pagina a imprimir con datos desde una base de
datos mediante el objeto PrintDocument y realizar un preview de sta mediante el control
PrintPreviewControl.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos "NorthWind" de SQL
Server y ejecuta un comando que llena una tabla de un DataSet con los cdigos, apellidos y nombres
de los Empleados. A partir de esta tabla se crea una vista la cual se enlaza a un control DataGrid.
La aplicacin tiene un men principal con una opcin de Reporte donde se puede realizar Preview de los
datos usando el PrintPreviewControl o imprimirlos usando el mtodo Print del objeto
PrintDocument.
Para ver la demostracin debemos realizar los siguientes pasos:
1.
2.
3.
Propiedad
Valor
Form1
Name
frmReporteEmpleado
Size
Width=300, Height=300
StartPosition
CenterScreen
Text
Reporte de Empleados
Name
dgdEmpleado
Dock
Fill
ReadOnly
True
MainMenu1
Name
MnuPrincipal
PrintDocument
Name
Pdt
DataGrid1
4.
Propiedad
Valor
MenuItem1
Name
mnuReporte
Text
Reporte
Name
mnuPreview
Text
Preview
MenuItem11
MenuItem12
-9-
Name
mnuPrint
Text
5.
6.
7.
cadenas
8.
9.
Nota: En el cdigo anterior para concatenar usamos el objeto StrngBuilder ya que si lo hacemos con los
operadores "&" o "+" por cada llamada crearamos un objeto String, en cambio usando un slo objeto
StrngBuilder podemos realizar muchas concatenaciones con el mtodo Append.
10.
- 10 -
ppc.Document = pdt
ppc.Zoom = 1
ppc.Dock = DockStyle.Fill
Dim frmPreview As New Form()
With frmPreview
.Text = "Preview del Reporte de Empleados"
.WindowState = FormWindowState.Maximized
.Controls.Add(ppc)
.ShowDialog()
End With
End Sub
Nota: En el cdigo anterior se configura la propiedad Zoom a 1 (100%) para que se -^^J muestre
los datos de los empleados.
11. Crear el procedimiento de evento ImprimirReporte, que ocurra en el evento "Click" de men
"mnuPrint" y escribir el siguiente cdigo:
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPrint.Click
pdt.Print()
End Sub
- 11 -
Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class frmReporteEmpleado
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim CadenaConexion As String = "Persist Security Info=False;Integrated
Security=SSPI;Initial Catalog=Northwind;server=(local)"
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select EmployeeID,LastName,FirstName
From Employees", con)
Dim dst As New DataSet()
dap.Fill(dst, "Empleados")
dvw = dst.Tables("Empleados").DefaultView
dgdEmpleado.DataSource = dvw
End Sub
Private Sub CrearPagina(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles pdt.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 10)
Dim Brocha As Brush = Brushes.Blue
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
For i = 0 To dvw.Count - 1
stb.Append(dvw(i)(0).ToString.PadRight(10))
stb.Append(dvw(i)(1).ToString.PadRight(25))
stb.Append(dvw(i)(2).ToString.PadRight(15))
Texto = stb.ToString
- 12 -
UscAntiAlias
Para trabajar con el dilogo de Preview, tan slo hay que configurar la propiedad Document del dilogo
en el objeto Prin Document, tal como sigue:
objPrintPreviewDialog.Document objPrintDocument
- 13 -
AllowOrientation
AllowPaper
AllowPrinter
Document
MinMargins
Obtiene o establece un valor que indica los mrgenes mnimos que se permite
seleccionar al usuario en centsimas de pulgada.
PageSetting
PrinterSettings
ShowHelp
ShowNetwork
Para trabajar con el dilogo de configuracin de pgina hay que configurar la propiedad Document del
dilogo en el objeto PrintDocument, tal como sigue:
objPageSetupDialog.Document = objPrintDocument
Adems para recuperar toda la configuracin del dilogo para que pueda ser usada por la impresin,
asignar en la propiedad DefaultPageSettings del objeto PrintDocument la propiedad PageSettings del
dilogo, tal como sigue:
obj PrintDocument.DefaultPageSettings =
obj PageSetupDialog.PageSettings
Nota: El dilogo de configuracin de pgina automticamente realiza este ltimo paso, es decir, toda la
configuracin seleccionada por el usuario en el dilogo es automticamente asignada al objeto PrintDocument.
- 14 -
AllowSelection
AllowSomePages
Document
PrinterSettings
PrintToFile
ShowHelp
ShowNetwork
Para trabajar con el dilogo de impresin, tambin hay que configurar la propiedad Document del
dilogo en el objeto PrintDocument, tal como sigue:
objPrintDialog.Document = objPrintDocument
Demo 67
Esta demostracin tiene por objetivo ensear a crear una pagina a imprimir con un simple mensaje
mediante el objeto PrintDocument y usar los dilogos de presentacin preliminar, de configuracin de
pgina y de impresin.
El ejemplo es similar al Demo65, es decir, trabaja con un simple formulario conteniendo un texto y tres
botones donde se debe ingresar un mensaje, el cual se puede ver como saldr impreso mediante el botn
"Preview", configurar la pgina mediante el botn "Page Setup" o imprimir mediante el botn "Print".
Para ver la demostracin debemos realizar los siguientes pasos:
1. Crear una Aplicacin Windows en Visual Basic .NET llamada Demo67.
2. En la ventana del explorador de soluciones seleccionar el archivo Form 1 y en la ventana de
propiedades cambiar la propiedad FileName a frmlmpresion.
3. En el diseador de formularios Windows, arrastrar un control Label, un TextBox, tres Button, un
PrintDocument, un PrintPreviewDialog, un PageSetupDialog y un PrintDialog, luego configurar las
propiedades, tal como se muestra en el siguiente cuadro:
Objeto
Propiedad
Valor
Form1
Name
frmImpresion
FormBorderStyle
FixedSingle
MaximizeBox
False
MinimizeBox
False
Size
Width=300,Height=300
StartPosition
CenterScreen
Label1
TexBox1
- 15 -
Text
Name
lblMensaje
Autosize
True
Location
X=16. Y=12
Text
Mensaje a Imprimir
Name
txtMensaje
Location
X=16, Y=36
Multiline
True
ScrollBars
Vertical
Size
Width=26,Height=188
Text
Button1
Name
btnPreview
Cursor
Hand
Location
X=16, Y=236
Size
Width=75, Height=23
Text
Preview
Name
btnPageSetup
Cursor
Hand
Location
X=110, Y=236
Size
Width=75, Height=23
Text
Page Setup
Name
btnPrint
Cursor
Hand
Location
X=204, Y=236
Size
Width=75, Height=23
Text
PrintDocument1
Name
pdtMensaje
PrintPreviewDialog1
Name
ppdMensaje
PageSetupDialog
Name
psdMensaje
PrintDialog1
Name
pdgMensaje
Button2
Button3
- 16 -
Nota: En el cdigo anterior las variables X e Y son usadas para imprimir el texto a partir del margen
actual.
6. Crear el procedimiento de evento PreviewConDialogo, que controle el evento "Click" del botn
"btnPreview" y escribir el siguiente cdigo:
Private Sub PreviewConDialogo(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPreview.Click
With ppdMensaje 'Dialogo de Preview
.Document = pdtMensaje
.Text = "Preview usando PrintPreviewDialog"
.WindowState = FormWindowState.Maximized
.ShowDialog()
End With
End Sub
Nota: En el cdigo anterior no se configura el zoom por cdigo ya que el dilogo automticamente presenta
botones de Zoom y otros botones.
7. Crear el procedimiento de evento ConfigurarPagina, que ocurra en el evento "Click" del botn
"btnPageSetup" y escribir el siguiente cdigo
Private Sub ConfigurarPagina(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPageStetup.Click
With psdMensaje 'Dialogo de Page Setup
.Document = pdtMensaje
.ShowDialog()
End With
End Sub
Nota: En el cdigo anterior no se configura el DefaultPageSettings del PrntDocument ya que el dilogo lo realiza
en forma automtica.
8.
Crear el procedimiento de evento ImprimirDocumento, que ocurra en el evento "Click del botn
"btnPrint" y escribir el siguiente cdigo:
Private Sub ImprimirDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrint.Click
With pdgMensaje 'Dialogo de Print
.Document = pdtMensaje
.AllowPrintToFile = False
.AllowSelection = True
.AllowSomePages = True
If .ShowDialog() = DialogResult.OK Then
pdtMensaje.PrinterSettings = .PrinterSettings
pdtMensaje.Print()
End If
End With
End Sub
Nota: En el cdigo anterior se configura las propiedades Allow del dilogo para permitir mostrar seleccin de
pginas en el dilogo de impresin. Tambin si el . usuario da clic en el botn "OK" del dialogo de imprimir,
entonces, se imprime el contenido del cuadro de texto.
- 17 -
11.
12.
Cierre la ventana del Preview y luego de clic al botn "Page Setup", mostrndose un dilogo
similar al de la figura 10.
- 18 -
13.
Proceda a configurar la pgina cambiando el tamao del papel, la orientacin y los mrgenes,
luego clic en "Aceptar" para cerrar el dilogo y realizar los cambios.
14.
Nuevamente de clic en el botn "Preview" para ver la presentacin de la pgina con los cambios
realizados, despus cierre el dilogo de Preview.
15.
- 19 -
17.
Si tiene varias impresoras instaladas selecciona aqulla que se usar para imprimir el
documento, configure el intervalo de pginas a imprimir y el nmero de copias y luego clic en
"Aceptar" para realizar la impresin y cerrar el dilogo.
Finalmente, cierre la ventana para salir de la aplicacin
- 20 -
Demo 68
Hasta el momento todos los documentos que hemos creado para imprimir tenan una simple pgina.
Esta demostracin tiene por objetivo ensear a crear un documento con varias pginas de datos
obtenidos desde una base de datos. En sta trabajaremos con todos los dilogos de impresin.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos "NorthWind" de SQL
Server y ejecuta un comando que llena una tabla de un DataSet con los cdigos de rdenes, fecha de
rdenes y cdigo de los clientes de la tabla Ordenes. A partir de esta tabla se crea una vista la cual se
enlaza a un control DataGrid.
La aplicacin tiene un men principal con una opcin de Reporte donde se puede realizar Preview de los
datos usando el PrintPreviewDialog, configurar la pgina usando el PageSetupDialog o imprimir
usando el PrintDialog.
Para ver la demostracin debemos realizar los siguientes pasos:
1.
2.
3.
Propiedad
Valor
Form1
Name
frmReporteOrden
Size
Width=300,Height=300
StarPosition
CenterScreen
Text
ReportedeOrdenes
Name
dgdOrden
Dock
Fill
ReadOnly
Trae
Name
Name
mnuPrincipal
DataGrid1
MainMenu1
PrintDocument1
Pdt
- 21 -
PrintPreviewDialog1
Name
Ppd
PageSetupDialog
Name
Psd
PrintDialog1
Name
Pdg
4. Seleccione el componente MainMenu y en la parte superior donde dice "Type Here", escriba
directamente los textos del men y configure sus propiedades, tal como se muestra en el siguiente
cuadro:
Objeto
Propiedad
Valor
MenuItem1
Name
MnuReporte
Text
Reporte
Name
MnuPreview
Text
Reporte
Name
MnuPageSetup
Text
PageSetup
Name
MnuPrint
Text
MenuItem11
MenuItem12
MenuItem13
7. Declarar dos variables privadas, una para la vista de Empleados y otra para la posicin del
registro en la vista (contador de registro):
Private dvw As DataView
Private cr As Integer
8. Crear el procedimiento de evento CargarDatos que maneje el evento "Load" del formulario y
escribir el siguiente cdigo:
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select OrderID,OrderDate,CustomerID
From Orders", con)
Dim dst As New DataSet()
dap.Fill(dst, "Ordenes")
dvw = dst.Tables("Ordenes").DefaultView
dgdOrden.DataSource = dvw
End Sub
9. Crear el procedimiento de evento CrearDocumento, que controle el evento "PrintPage" del objeto
"pdt" y escribir el siguiente cdigo:
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles pdt.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 10)
- 22 -
Notas:
Para que los textos de las columnas salgan del mismo ancho se usa la fuente "Courier New".
Para ahorrar memoria al momento de concatenar se usa el objeto StringBuilder.
La cantidad de lneas a imprimir de una pgina (LP) es obtenida dividiendo el alto del margen entre el alto de la
fuente.
Para crear una nueva pgina se usa la propiedad HasMorePage en True slo cuando el contador de registros
(cr) sea menor al ndice del ltimo registro (dvw.Count-1).
El proceso de creacin termina cuando no haya ms registros que mostrar, es decir cuando el contador de
registros llegue a la ltima posicin.
10. Crear el procedimiento de evento MostrarPreview, que controle el evento "Click" del men
"mnuPreview" y escribir el siguiente cdigo:
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPreview.Click
ppd.Document = pdt
ppd.ShowDialog()
End Sub
11. Crear el procedimiento de evento ConfigurarPagina, que ocurra en el evento "Click" del men
"mnuPageSctup" y escribir el siguiente cdigo:
Private Sub ConfigurarPagina(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPageSetup.Click
psd.Document = pdt
psd.ShowDialog()
End Sub
12. Crear el procedimiento de evento ImprimirReporte, que ocurra en el evento "Click" del men
"mnuPrint" y escribir el siguiente cdigo:
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPrint.Click
pdg.Document = pdt
If pdg.ShowDialog() = DialogResult.OK Then
pdt.PrinterSettings = pdg.PrinterSettings
pdt.Print()
End If
End Sub
- 23 -
15. Del men "Reporte" seleccionar la opcin "Preview" y se mostrar el dilogo de presentacin
preliminar similar a la figura 10.10
- 24 -
Private cr As Integer
Dim CadenaConexion As String = "Persist Security Info=False;Integrated
Security=SSPI;Initial Catalog=Northwind;server=(local)"
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select OrderID,OrderDate,CustomerID From
Orders", con)
Dim dst As New DataSet()
dap.Fill(dst, "Ordenes")
dvw = dst.Tables("Ordenes").DefaultView
dgdOrden.DataSource = dvw
End Sub
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles pdt.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 10)
Dim Brocha As Brush = Brushes.Blue
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
Dim LP As Integer = e.MarginBounds.Height \ Fuente.GetHeight
For i = 0 To LP
If cr = dvw.Count - 1 Then Exit Sub
stb.Append(dvw(cr)(0).ToString.PadRight(15))
stb.Append(dvw(cr)(1).ToString.PadRight(30))
stb.Append(dvw(cr)(2).ToString.PadRight(15))
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
cr = cr + 1
Next
e.HasMorePages = cr < dvw.Count - 1
End Sub
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPreview.Click
ppd.Document = pdt
ppd.ShowDialog()
End Sub
Private Sub ConfigurarPagina(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPageSetup.Click
psd.Document = pdt
psd.ShowDialog()
End Sub
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPrint.Click
pdg.Document = pdt
If pdg.ShowDialog() = DialogResult.OK Then
pdt.PrinterSettings = pdg.PrinterSettings
pdt.Print()
End If
End Sub
End Class
- 25 -
primero daremos una breve revisin sobre ste, luego veremos sus componentes y finalmente
ensearemos a crear reportes o informes y a mostrarlos en nuestras aplicaciones Windows Forms .NET.
Introduccin
Para presentar datos a los usuarios, puede escribir cdigo de modo que se lean conjuntos de registros
de manera cclica para luego imprimirlos en una aplicacin Web o de Windows. Sin embargo, en
trabajos que no se ajusten a un formato bsico podra resultar complicado: resulta compleja la
programacin de consolidaciones, totales de varios niveles, grficos y formatos condicionales.
Con Crystal Reports para Visual Studio .NET, puede crear rpidamente informes complejos de
apariencia profesional. En lugar de utilizar programacin, la interfaz de Crystal Report Designer le
permite crear y dar formato al informe que desee. El eficaz motor de informes procesa los criterios de
formato, agrupamiento y creacin de grficos que especifique.
2.1.2.
Asistente de Informes
Los asistentes de Crystal Report permiten crear rpidamente informes en funcin de las necesidades
de desarrollo:
Seleccionar la opcin de diseo de informes que le interese, desde informes estndar hasta cartas
modelo, o bien cree sus propios informes partiendo de cero.
Mostrar grficos en los que los usuarios puedan profundizar con el fin de ver datos detallados de
los informes.
Calcular resmenes, subtotales y porcentajes de datos agrupados.
Mostrar resultados de datos de N Superiores y N Inferiores.
Dar formato al texto y rotar objetos de texto cuando se cumplan determinadas condiciones.
2.1.3. Ventajas de Informes
Crystal Reports para Visual Studio .NET es un componente integrado del entorno de desarrollo de
Visual Studio .NET. Esta integracin proporciona a los usuarios las siguientes ventajas relacionadas
con la elaboracin de informes, las cuales la podemos dividir en dos:
1.
Para Programadores:
Uso de los visores de informes: sin clientes (Web) y varios clientes (Windows):
Crystal Reports para Visual Studio .NET proporciona dos visores de informes con los que puede
ver informes en aplicaciones: utilice Web Forms Viewer para las aplicaciones Web y Windows
Forms Viewer para las aplicaciones de Windows.
Una vez seleccionado el marco de desarrollo. Crystal Reports proporciona el visor de informes
adecuado para la aplicacin y para el lenguaje de desarrollo utilizados. Estos visores de
- 26 -
Para Usuarios:
Visualizacin de Crystal Reports en el Web.
Si desarrolla una aplicacin Web que contenga un informe o un servicio Web de informes, todos
los procesos se realizan en el servidor. Los usuarios slo necesitan un explorador Web. La
funcionalidad de los informes es la misma en el Web que en una aplicacin de Windows.
Acceso a informes perfectamente integrados:
Los usuarios no necesitan saber que estn accediendo a un informe cuando hacen clic en un
grfico de una aplicacin Web o de Windows. El control del visor de informes puede ser uno de
los muchos controles de la aplicacin.
Fcil interaccin con los informes:
Los usuarios pueden filtrar la informacin de los informes haciendo clic en un botn o
seleccionando una opcin de un cuadro combinado, ya que Crystal Reports para Visual
Studio .NET puede interactuar con otros controles.
Exportacin de informes:
Los usuarios pueden exportar informes a formatos de Microsoft Word y Excel, as como a
formatos PDF, HTML y Crystal Reports para Visual Studio .NET.
- 27 -
objeto se puede utilizar tanto en una aplicacin de Windows como en una aplicacin Web; no obstante,
no puede ver los informes. En este punto es donde interactan los controles Viewer y el objeto
ReportDocument. Puede utilizar este objeto para realizar modificaciones y, a continuacin, pasarlo a
los controles Viewer para verlo.
2.2.1. Objeto ReportDocument
El nivel superior del modelo de objetos de Crystal Reports es el objeto ReportDocument. Este objeto
contiene todas las propiedades y todos los mtodos necesarios para interactuar con un informe y
personalizarlo. Puede utilizar su mtodo Load para abrir un archivo de informe o asignarle un informe
con tipos declarados.
Para utilizar ReportDocument, en primer lugar debe hacer referencia al espacio de nombres
CrystalDecisions.CrystalReports.Engine,
que
se
encuentra
en
el
archivo
CrystalDecisions.CrystalReports.Engine.dll. Si ha insertado un informe en la aplicacin, esta
referencia se agregar automticament
Propiedades
ExportOptions:
El objeto ExportOptions proporciona las propiedades para recuperar y establecer las opciones
de exportacin del informe. ExportOptions se utiliza para establecer las opciones de destino
(disco, correo electrnico e intercambio) y el tipo de exportacin (Excel, PDF, Word y HTML).
PrintOptions:
El objeto PrintOptions proporciona las propiedades y los mtodos para establecer las opciones
de impresin de un informe. Algunas de las propiedades que puede establecer son el nombre de
la impresora, el tamao y la orientacin del papel, as como los mrgenes de pgina.
- 28 -
- 29 -
ReportDefinition:
El objeto ReportDefinition permite recuperar todas las clases reas, ReportObjects y Section de un
informe. Esto le permite obtener y establecer las opciones de formato de estos elementos para que
pueda personalizarse la apariencia del informe.
ReportOptions:
El objeto ReportOptions le permite obtener y establecer los datos relacionados con las
opciones
del
informe
(EnableSaveDataWithReport,
EnableSavePreviewPicture,
EnableSaveSummariesWithReport y EnableUseDummyData) de un informe.
Summarylnfo
El objeto Summari Info le permite obtener y definir la informacin de resumen del informe. Incluye
Keyword:iReport, ReportAuthor, ReportComments, ReportSubjecty ReportTitle.
2.2.2. Windows Forms Viewer
Si programa una aplicacin Windows, puede almacenar un informe en Windows Forms con "Crystal
Reports Windows Forms Viewer", que est disponible como control en el cuadro de herramientas de
Visual Stiudio (CrystalReportView).
Adems de proporcionar la comodidad de ver informes en una aplicacin de Windows, Windows Forms
Viewer puede interactuar con otros controles de la misma aplicacin y actualizar de forma dinmica el
informe que contiene
- 30 -
Propiedades
Windows Forms Viewer contiene propiedades que le permiten al usuario personalizar y controlar la
apariencia y el comportamiento del informe. A continuacin describimos los objetos y las colecciones
principales de Windows Forms Viewer:
TableLogOnInfos:
TableLogOnInfos proporcionar acceso a la coleccin TableLogOnlnfo. El objeto
TableLogOnlnfo proporciona propiedades para recuperar y establecer las opciones de
conectividad de la tabla como: nombre de servidor, nombre de usuario, nombre de la base de
datos y contrasea.
ParameterFields:
El objeto ParameterFields proporciona acceso a la coleccin ParameterField. Este objeto le
permite obtener y establecer la informacin de los parmetros del informe. Por ejemplo, puede
establecer propiedades para recuperar y establecer las opciones y los valores de un campo de
parmetro. Por ejemplo: los valores actuales, los valores predeterminados y el texto de
confirmacin.
ReportSource:
La propiedad ReportSource se utiliza para establecer el origen del informe. Puede ser un objeto
ReportDocument o una cadena que contenga la ubicacin del archivo del informe.
- 31 -
- 32 -
10. Expandir el icono de "Project Data", "ADO .NET DataSets" y luego el DataSet creado.
11. Seleccionar la tabla que se desea usar en el reporte y clic en el botn "Insert Table".
Nota: Pueden usarse ms de una tabla en el caso de crear reportes agrupados.
12. Clic en el botn "Next" y se mostrar la ficha "Fields" del "Report Expert", similar a la de la
figura 10.15.
- 33 -
13. Seleccionar los campos que se mostrarn en el reporte y clic en el botn "Add", si se desean pasa
todos clic en "Add All
Nota: Despus de pasar los campos, se pueden seleccionar y cambiar el ttulo de las
cabeceras en la opcin "Column Heading".
14. Clic en el botn "Next" y se mostrar la ficha "Group" del "Report Expert", similar a la de la figura
10.16
- 34 -
15. Si desea agrupar los registros por algn campo en comn que tengan stos seleccionar dicho
campo y clic en el botn "Add"
16. Clic en el botn "Next" y si eligi Agrupar por algn campo se ver la ficha "Total" del "Report
Expert", similar a la de la figura 10.17.
- 35 -
17.
Seleccionar los campos que se mostrarn como clculos en el pie de los detalles, luego
seleccionar cada uno y elegir la funcin que se quiere mostrar; contar, suma, promedio,
mximo, mnimo, etc.
18.
Clic al botn "Next" y si eligi Agrupar por algn campo se ver la ficha "Top N" del
"Report Expert", similar a la de la figura 10.18
- 36 -
19.
Si desea puede sspecificar ordenar los datos agrupados basados en un total o clculo
creado.
20.
Clic al botn "Next" y se ver la ficha "Chart" del Report Expert", similar a la de la
figura 10.19.
- 37 -
Si desea puede crear un grfico de datos, seleccionando el tipo de grfico, los datos a graficar y
los ttulos del grfico.
22. Clic al botn "Next" y se ver la ficha "Select" del "Report Expert", similar a la de la figura 10.20
- 38 -
23. Si desea puede seleccionar un campo por el cual se desea filtrar los datos, escribiendo la
condicin del filtro.
24. Clic al botn "Next" y se ver la ficha "Style" del "Report Expcrt", similar a la de la figura 10.21
- 39 -
25.
26.
- 40 -
27. Para modificar el reporte puede usar los controles de la ficha "Crystal Reports" del
"ToolBox", similar a la vista en la figura 10.23
Tambin puede usar las barras de herramientas del Crystal Report, similar a las mostradas en las
figuras 10.24 y 10.25:
Nota: La barra de herramientas principal permite modificar las caractersticas de los controles
diseados en el reporte, tal como la fuente, tamao, alineacin. Adems permite cambiar
caractersticas del reporte insertando campos, ordenando, et
Nota: La barra de herramientas insertar permite agregar totales al reporte, insertar grupos,
adicionar subreportes, adicionar un grfico de datos o insertar una imagen.
29. Finalmente despus de realizar cambios al reporte, proceda a grabarlo.
Nota: Los reportes creados en el Crystal Reports tienen la extensin rpt.
2.3.2. Presentando el Informe en Windows Forms Viewer
Una vez creado el reporte con el diseador de reportes es necesario presentarlo en una aplicacin de
Windows Forms, para lo cual se usa el visor de reportes para formularios Windows, en ingls
Windows Forms Viewer.
Hay que mencionar que un mismo reporte (archivo rpt) puede ser usado en Windows o en Web, lo
nico que cambia es el visor, para el caso de una aplicacin Web con ASP .NET ser el Web Forms
Viewer.
En este caso veremos slo el visor de las aplicaciones Windows, el cual se encuentra en el
- 41 -
Barra de herramientas
El visor de reportes tiene empaquetado una barra de herramientas similar a la mostrada en la figura
10.26:
Ir a primera pgina.
Retroceder pgina.
Avanzar pgina.
Ir a la ltima pgina.
Imprimir informe.
Actualizar informe.
Exportar un informe.
Aumentar/reducir informe.
Buscar
rbol de Grupos
El visor de reportes tambin contiene un rbol de grupos ubicado en el lado derecho, ste slo
aparece si se dan estas dos condiciones:
El informe Crystal tiene un rbol de grupos.
Ha mostrado u ocultado el icono Mostrar rbol de grupos de la barra de herramientas del visor.
Nota: Puede expandir y contraer el rbol de grupos si hace clic en el smbolo + que aparece junto a
cada nodo del mismo.
- 42 -
Demo 69
Esta demostracin tiene por objetivo ensear a crear un simple reporte de datos usando el Crystal
Report Export, el Report Designer y el CrystalReportViewer.
El ejemplo trabaja con un formulario que muestra en un control visor de reportes informacin de los
Clientes de la BD "Northwind" de SQL Server. En el reporte se muestran el cdigo, nombre y direccin
de los clientes.
Para ver la demostracin debemos realizar los siguientes pasos:
1.
2.
3.
Propiedad
Valor
Form1
Name
frmReporteCliente
StartPosition
CenterScreen
Text
Reporte de Clientes
WindowsState
Maximizad
Name
Crv
DisplayGroupTree
False
Dock
Fill
CrsytalReportViewer
4.
Del men "View " elegir la opcin "Server Explorer" o pulsar las teclas [Ctrl] + [Alt] + [S].
5.
6.
7.
Arrastrar los campos hacia cualquier parte del formulario y automticamente se crearn dos
objetos: un SqlConncctionl y un SqlDataAdapter1 conteniendo todas las instrucciones SQL
para la tabla Clientes (por defecto: Select, Insert, Update y Delete).
8.
9.
Clic derecho al objeto "dap" y del men contextual seleccionar "Generate DataSet".
10.
Aparecer un dilogo, en la opcin Elegir un DataSet, por defecto aparece "Nuevo", escribir el
nombre para el DataSet como dst.
11.
12.
Inmediatamente se crear en esquema XML llamado "dst" y un objeto DataSet con tipo llamado
"Dstl".
13.
- 43 -
Del men "Project", seleccionar "Add New tem" o pulsar las teclas [Ctrl] + [Shifl] + [A].
Clic en el botn "Next" y se mostrar la ficha "Fields" del "Report Expert" (figura 10.15).
24.
Clic en el botn "Add All" para mostrar todos los campos en el reporte.
25.
Despus de pasar los campos, modificar los ttulos de las cabeceras, para el primer campo Cdigo,
para el segundo Nombre y para el tercero Direccin.
26.
Clic en el botn "Next" y se mostrar la ficha "Group" del "Report Expert" (figura 10.16).
27.
28.
Clic en "Next" para indicar que no deseamos un grfico de datos y se mostrar la ficha "Select"
del "Report Export" (figura 10.20).
29.
Clic en "Next" para indicar que no deseamos filtrar y se ver la ficha "Style" del "Report Export"
(figura 10.21).
30.
Escribir como ttulo del reporte "Lista de Clientes Northwind" y seleccionar el ltimo estilo de la
lista.
31.
Clic en el botn "Finish" para crear el reporte y aparecer el Crystal Report Designer, por si
deseamos hacer algn cambio.
32.
Regresar al formulario y en la ventana explorador de soluciones dar clic en el botn " View Code".
33.
Notas:
El reporie creado con el Crystal Report es una clase, por tanto hay que crear un objeto para trabajar con esta
(rpt).
- 44 -
El objeto de reporte tiene un mtodo SetDataSource donde hay que pasar como parmetro el origen del
reporte, es decir, el DataSet (Dstl).
Para que se pueda visualizar el reporte en el visor de reportes de Windows hay que configurar la propiedad
ReportSource del visor asignndole el objeto del reporte (rpt).
34.
35.
36.
37.
Demo 70
Esta demostracin tiene por objetivo ensear a crear un reporte de datos con quiebres o
agrupamientos y subtotales o clculos, usando para ello el Crystal Report Export, el Report Designer y el
- 45 -
CrystalReportViewer.
El ejemplo trabaja con un formulario que muestra en un control visor de reportes informacin de las
Ordenes y sus Detalles de la BD "Northwind" de SQL Server.
En el reporte se muestran en la cabecera los datos de la orden, como cdigo de orden, fecha de la orden,
nombre del cliente y apellido del empleado; mientras que en el detalle se aprecia el nombre del
producto, precio unitario, cantidad y precio total. Tambin se muestran como subtotales el Total de
tems y el Valor Total de todos los detalles de la Orden.
Para ver la demostracin debemos realizar los siguientes pasos:
1.
2.
3.
Propiedad
Valor
Form1
Name
FrmReporteDetallesOrden
StartPosition
CenterScreen
Text
WindowsState
Maximizad
Name
Crv
DisplayGroupTree
True
Dock
Fill
CrsytalReportViewer
4.
5.
6.
7.
8.
9.
10. Seleccionar la tabla "Orders y elegir los campos: OrderID y OrderDate. Seleccionar la tabla
"Customers" y elegir el campo CompanyName. Seleccionar la tabla "Employees" y elegir el campo
LastName.
11. Clic al botn "Aceptar" del Query Builder y regresaremos a la ventana de "Generar instruccin
SQL".
12. Clic en el botn "Advanced Options..." y en el dilogo de Opciones Avanzadas desactivar la
primera opcin "Generar instrucciones Insert, Update y Delete", luego clic en el botn "OK".
13. Regresaremos a la Ventana de configuracin del DataAdapter Wizard con la configuracin
seleccionada, clic al botn "Next".
14. Inmediatamente se presentar la ventana con el Resultado, clic en el botn "Finish" y se crearn los
- 46 -
- 47 -
- 48 -
50. Una vez mostrado el reporte podemos navegar directamente hacia una orden a travs del rbol de
Grupos ubicado en la parte izquierda del visor.
51.
- 49 -
Demo 71
Esta demostracin tiene por objetivo ensear a crear un reporte de datos que use procedimientos
almacenados, tanto sin parmetros como con parmetros, usando para los reportes el Crystal Report
Export, el Report Designery el CrystalReportViewer.
El ejemplo trabaja con dos formularios, uno creado en tiempo de diseo que muestra las
"Categoras" de productos en un ComboBox, las cuales se obtienen ejecutando un procedimiento
almacenado sin parmetros.
Al seleccionar una categora se crea un formulario en tiempo de ejecucin donde se muestra en un
visor el reporte de Productos de dicha categora, el cual se obtiene ejecutando un procedimiento
almacenado con un parmetro.
Para ver la demostracin debemos realizar los siguientes pasos:
1. En el Visual Studio .NET, del men "View" seleccionar "Server Explorer".
2. Expandir el servidor y luego la base de datos "Northwind".
3. En el icono de "Stored Procedures" dar clic derecho y seleccionar "New Stored Procedure".
4. Crear un procedimiento que permita Listar las Categoras:
CREATE PROCEDURE up_Categoria_Listar
As
Select CategoryID,CategoryName From Categories
Propiedad
Valor
Form1
Name
frmReporteProductosCategoria
MaximizeBox
False
ComboBox1
Button1
- 50 -
MinimizeBox
False
Size
Width=300 ,Height=180
Star Position
CenterScreen
Text
Name
cboCategoria
DropDownStyle
DropDownList
Location
X=16,Y=24
Size
Width=260,Height=21
Name
BtnReporte
Cursor
Hand
Location
X=66,Y=84
Size
Width=160,Height=21
Text
- 51 -
44. Crear el procedimiento de evento MostrarReporte, que maneje el evento "clic botn "btnReporte" y
escribir el siguiente cdigo:
- 52 -
- 53 -
- 54 -
- 55 -
End With
End Sub
End Class
- 56 -
En la siguiente seccin explicamos brevemente los objetos de nivel superior y cmo interactan entre
s.
Application
El objeto Application representa la aplicacin Word y es el principal de todos los objetos. Sus
miembros normalmente son aplicables a Word en su totalidad. Se pueden utilizar sus
propiedades y mtodos para controlar el entorno de Word.
Document
El objeto Document es de vital importancia para la programacin en Word. Cuando se abre un
documento o se crea un documento nuevo, se est creando un objeto Document nuevo, que se
agrega a la coleccin Documents de Word. El documento que tiene el foco se llama documento
activo y se representa mediante la propiedad ActiveDocument del objeto Application,
Selection
El objeto Selectior representa el rea que est seleccionada. Cuando se realiza una operacin en la
interfaz de usuario de Word, como poner texto en negrita, se selecciona o resalta el texto y, a
continuacin, se aplica el formato. El objeto Selection siempre est presente en un documento.
Adems, tambin puede representar varios bloques de texto no contiguos.
Range
El objeto Range representa un rea contigua de un documento, y se define mediante una
posicin de carcter inicial y una posicin de carcter final. Pueden utilizarse varios objetos Range
a la vez. El mismo documento puede tener definidos varios objetos Range. Un objeto
Range tiene las siguientes caractersticas:
- Puede ser e1 punto de insercin solamente, un rango de texto o el documento
completo.
- Incluye caracteres no imprimibles como espacios, caracteres de tabulacin y marcas de
prrafo.
- Puede ser el rea representada por la seleccin actual, o puede representar otra rea
diferente de la de la seleccin actual.
-
- Guando se inserta texto al final de un rango, Word ampla ste automticamente para que
incluya el nuevo texto.
Bookmark
El objeto Bookmark se parece al objeto Range en que representa un rea contigua de un
documento, con una posicin inicial y una posicin final. Los marcadores se utilizan para
marcar una ubicacin en un documento o como contenedores de texto en un documento. Un
objeto Bookmark puede ser el punto de insercin o el documento completo. Tambin se pueden
definir varios marcadores en un documento. Un objeto Bookmark tiene las siguientes
caractersticas que lo distinguen del objeto Range:
-
- Los marcadores se guardan con el documento y, por lo tanto, no desaparecen cuando cesa
la ejecucin del cdigo o al cerrar el documento.
- 57 -
- De manera predeterminada los marcadores estn ocultos, pero pueden hacerse visibles si
se establece la propiedad ShowBookmarks del objeto View en True. (El objeto View es un
miembro de los objetos Window y Pane, que existen en los objetos Application y
Document).
Aunque el propsito de este libro no es programar en Visual Basic para Aplicaciones (VBA) creo que es
necesario conocer los objetos del software que vamos a programar en este caso MS Word.
Luego de esta breve revisin ya podemos crear un documento que nos sirva de plantilla para llenarlo
con los datos de la aplicacin.
3.1.2. Creando el Documento en MS Word para el Informe
Si queremos crear un documento en Microsoft Word que sirva para aceptar datos desde una
aplicacin debemos usar campos dentro de un formulario.
En general, debemos realizar los siguientes pasos para crear un documento para nuestro informe:
1. Abrir el MS Word, del botn 'inicio", seleccionar "Programas", luego "Microsoft Office 2000" y
finalmente "Microsoft Word".
2. Del men "Ver" seleccionar "Barras de herramientas" y elegir "Formularios
3. Empezar a crear la parte fija del documento, como ttulos, prrafos, mensajes, imgenes, tablas,
etc.
4. Cuando desee crear un dato variable (campo) que se llenar desde la base de datos ubicarse sobre
la posicin y clic en el primer botn de la barra de formularios para insertar un "Campo con texto".
5. Proceda a realizar el paso anterior para todos los campos o datos variables del documento y
finalmente grabar el documento en la carpeta donde est el ejecutable de la aplicacin.
Nota: Cuando desarrollamos aplicaciones Windows usando el Visual Studio .NET, la carpeta donde est la
aplicacin (el ejecutable o exe) es a carpeta Bin que se encuentra dentro de la carpeta con el
Proyecto.
- 58 -
Nota: Por ser un componente COM el Visual Studio .NET crear unas libreras de interoperabilidad entre
COM y .NET (Interop), las cuales se crean en el mismo directorio donde se ejecuta la aplicacin.
3. Abrir el documento creado como plantilla para el informe mediante el mtodo Open de la
coleccin Documcnts del objeto Application:
W. Documents . Open ("Archivo. doc")
4. Escribir cada valor de un campo de la vista en el campo del documento creado mediante la
propiedad tem de la coleccin Fields del objeto Document de la aplicacin Word:
W.ActiveDocument.Fields.Item(l).Result.Text = dgdProducto.Item(N, 0)
Demo 72
Esta demostracin tiene por objetivo ensear a crear documentos para informes en MS Word y
llenarlos desde una aplicacin Windows en .NET.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos Northwind de SQL
Server y llena dos tablas, una de Categoras y otra de Productos. La tabla de Categoras se enlaza a un
ComboBox mostrndose el nombre de la categora y la tabla de Productos sirve para crear una vista, la
cual se enlaza a un DataGrid mostrndose el cdigo, nombre, precio y cdigo de la categora del
producto.
Al seleccionar una Categora del combo, la vista se filtra mostrando los productos de dicha
categora. Finalmente, a! seleccionar un registro y dar clic al botn "Crear Documento" se abrir la
plantilla de Word y se llenar con los datos del registro actual y se grabar en disco.
Para ver la demostracin debemos realizar los siguientes pasos:
1. Abrir el MSWcrd, del botn "Inicio", seleccionar "Programas", luego "Microsoft Office 2000" y
finalmente "Microsoft Word".
2. Del men "Ver"-seleccionar "Barras de herramientas" y elegir "Formularios".
3. Empezar a crear el siguiente contenido:
ACME SA
Informe de Producto
Cdigo
Descripcin
Precio Unitario
Categoria
Aprobado Por:
Nota: Para agregar los campos (cuadros con sombra) dar clic al primer botn de la barra de formulario
- 59 -
Propiedad
Valor
Form1
Name
FrmConsultaProductosCategoria
MinimumSize
Width=350,Height=320
Size
Width=350,Height=320
StartPosition
CenterScreen
Text
Consultade
Categora
Name
lblCategoria
AutoSize
True
Location
X=16, Y=20
Text
Elige la categoria
Name
cboCategoria
Anchor
Top,Left,Tight
DropDownStyle
DropDownList
Location
X=136, Y=16
Size
Width=190,Heiight=21
Name
dgdProducto
Anchor
Top,Bottom,Left,Right
Location
X=16,Y=52
ReadOnly
True
Size
Width=310, Height=200
Name
btnCrearDocumento
Anchor
Bottom,Left,Right
Cursor
Hand
Location
X=117, Y=260
Size
Width=108.Height=23
Text
Crear Documento
Label1
ComboBox1
DataGrid1
Button1
Productos
- 60 -
12. Crear el procedimiento de evento LlenarDatos, que ocurra en el evento "Load" del formulario y
escribir el siguiente cdigo:
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection("Persist Security Info=False;Integrated
Security=SSPI;Initial Catalog=Northwind;server=(local)")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With cboCategoria
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
End With
dgdProducto.DataSource = dvw
End Sub
14. Crear el procedimiento de evento CrearDocumento, que ocurra en el evento "Click" del botn
"btnCrearDocumento" y escribir el siguiente cdigo:
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCrearDocumento.Click
Dim ruta As String = Application.StartupPath & "\Informe del Producto"
Dim N As Integer = dgdProducto.CurrentRowIndex
Dim W As New Word.Application()
W.Visible = True
W.Documents.Open(ruta & ".doc")
With W.ActiveDocument.Fields
.Item(1).Result.Text = dgdProducto.Item(N, 0)
.Item(2).Result.Text = dgdProducto.Item(N, 1)
.Item(3).Result.Text = dgdProducto.Item(N, 2)
.Item(4).Result.Text = dgdProducto.Item(N, 3)
End With
W.ActiveDocument.SaveAs(ruta & " " & dgdProducto.Item(N, 1) & ".doc")
End Sub
Nota: El archivo de Word que sirve de plantilla para el informe lo estamos recuperando de la ruta
- 61 -
donde se encuentra la aplicacin mediante la propiedad StartupPath del objeto Application de .NET.
17. Una vez creada la carpeta Bin con el exe, proceda a copiar el archivo de Word creado
anteriormente en dicha carpeta.
18. Seleccionar una categora y ver como se filtran los productos de dicha categora.
19. Seleccionar un registro y clic al botn "Crear Documento" e inmediatamente se abrira Ms Word
con la plantilla, se escribirn los datos y se guardar con un nuevo nombre
- 62 -
20. Proceder a crear varios documentos para los productos deseados cerrando siempre Word
21. Finalmente, cerrar la ventana para finalizar la aplicacin.
Cdigo del formulario frmConsultaProductosCategoria del Demo72
Imports System.Data.SqlClient
Public Class frmConsultaProductosCategoria
Inherits System.Windows.Forms.Form
Private dvw As DataView
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection("Persist Security Info=False;Integrated
Security=SSPI;Initial Catalog=Northwind;server=(local)")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With cboCategoria
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
- 63 -
End With
dgdProducto.DataSource = dvw
End Sub
Private Sub FilltrarProductos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cboCategoria.SelectedIndexChanged
Try
dvw.RowFilter = "CategoryID=" & cboCategoria.SelectedValue
Catch ex As Exception
End Try
End Sub
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCrearDocumento.Click
Dim ruta As String = Application.StartupPath & "\Informe del Producto"
Dim N As Integer = dgdProducto.CurrentRowIndex
Dim W As New Word.Application()
W.Visible = True
W.Documents.Open(ruta & ".doc")
With W.ActiveDocument.Fields
.Item(1).Result.Text = dgdProducto.Item(N, 0)
.Item(2).Result.Text = dgdProducto.Item(N, 1)
.Item(3).Result.Text = dgdProducto.Item(N, 2)
.Item(4).Result.Text = dgdProducto.Item(N, 3)
End With
W.ActiveDocument.SaveAs(ruta & " " & dgdProducto.Item(N, 1) & ".doc")
End Sub
End Class
- 64 -
este caso, las propiedades se aplican a un libro especfico, en vez de aplicarlas al libro activo
completo.
Worksheet
Aunque la clase Worksheet proporciona muchos miembros, la mayora de las propiedades, de los
mtodos y de los eventos sor idnticos o similares a los miembros proporcionados por las clases
Application o Workbook.
Excel proporciona una coleccin Sheets como propiedad de un objeto Workbook, pero no existe
ninguna clase Sheet en Excel. En su lugar, cada miembro de la coleccin Sheets es un objeto
Worksheet o Chart.
Range
El objeto Range es el que utilizar con mayor frecuencia en las aplicaciones de Excel. Antes de que
pueda manipular una regin de Excel, debe expresarla corno objeto Range y trabajar con los
mtodos y las propiedades de este objeto. Un objeto Range representa una celda, una fila, una
columna, una seleccin de celdas que contienen uno o ms bloques de celdas (que pueden ser
contiguas o no) o incluso un grupo de celdas de varias hojas de clculo.
En este tema se han descrito brevemente las clases ms importantes: Application, Workbook,
Worksheet y Range. Hay muchas otras clases que podran ser tiles, como PivotTable y Chart. El
modelo de objeto permite que el usuario realice prcticamente cualquier tarea automatizada necesaria.
En nuestro caso, para crear grficos de datos usaremos la clase Application y las colecciones
WorkBooks y Charts, tal como explicamos en la siguiente seccin.
3.2,2. Creando un Grfgo de Datos con MS Excel
Para crear un grfico en MS Excel con datos de una vista desde la aplicacin debemos realizar los
siguientes pasos:
1. Hacer una referencia a la librera de tipos de MS Excel:
- 65 -
X.ActiveChart.ChartType = Nmero_Grfico
X.ActiveChart.SetSourceData(Rango, Nmero_Orientacin)
X.ActiveChart.Location(Nmero_Ubicacin)
Demo 73
Esta demostracin tiene por objetivo ensear a crear un grfico de barras en MS Excel con datos
obtenidos desde una aplicacin Windows en .NET.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos Northwind de SQL
Server y llena dos tablas, una de Categoras y otra de Productos. La tabla de Categoras se enlaza a un
ComboBox mostrndose el nombre de la categora y la tabla de Productos sirve para crear una vista,
la cual se enlaza a un DataGrid mostrndose el cdigo, nombre, precio y cdigo de la categora del
producto.
Al seleccionar una Categora del combo la vista se filtra mostrando los productos de dicha categora.
Finalmente, al seleccionar un registro y dar clic al botn "Crear Grfico" se abrir el Excel y se enviarn
los datos de la vista filtrada por categora, con los cuales se construir un grfico de barras el cual
tambin se guarda en disco como archivo gif.
Para ver la demostracin debemos realizar los siguientes pasos:
1. Crear una Aplicacin Windows en Visual Basic .NET llamada Demo73.
2. En la ventana del explorador de soluciones seleccionar el archivo Forml y en la ventana de
propiedades cambiar la propiedad FileName a frmConsultaProductosCategoria.
3. En el diseador de formularios Windows, arrastrar un control Label, un ComboBox, un DataGrid y
un Button, luego configurar las propiedades, tal como se muestra en el siguiente cuadro:
Objeto
Propiedad
Valor
Form1
Name
frmConsultaProductosvategoria
MinimumSize
Width=350,Height=320
Size
Width=350,Height=320
StartPosition
CenterScreen
Text
Name
lblCategoria
AutoSize
Trae
Location
X=16,Y=20
Text
Elige la Caegoria
Name
cboCategoria
Anchor
Top,Left,Right
DropDownStyle
DropDownList
Location
X=136,Y=16
Size
Width=190, Height=21
Name
dgdProducto
Label
ComboBox1
DataGrid1
Button1
- 66 -
Anchor
Location
X=16,Y=32
ReadOnly
True
Size
Width=310,Height=200
Name
btnCrearGrafico
Anchor
Bottom,Left,Right
Cursor
Hand
Location
X=117, Y=260
Size
Width=108,Height=23
Text
Crear Grfico
8. Crear el procedimiento de evento LlenarDatos, que ocurra en el evento "Load" del formulario y escribir el
siguiente cdigo:
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New
SqlConnection("uid=sa;server=(Local);database=northwind")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With cboCategoria
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
End With
dgdProducto.DataSource = dvw
End Sub
el
evento
- 67 -
10 rear el procedimiento de evento CrearGrafico, que ocurra en el evento "Click" del botn
"btnCrearGrafico" y escribir el siguiente cdigo:
Private Sub CrearGrafico(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCrearGrafico.Click
Dim ruta As String = Application.StartupPath & "\Grafico de "
Dim X As New Excel.Application()
X.Visible = True
X.Workbooks.Add()
X.Cells(1, 1).Value = "Descripcion del Producto"
X.Cells(1, 2).Value = "Precio"
Dim I, F As Integer
F = 2
For I = 0 To dvw.Count - 1
X.Cells(F, 1).Value = dvw(I)(1)
X.Cells(F, 2).Value = dvw(I)(2)
F += 1
Next
X.Columns.AutoFit()
X.Range("A1").Select()
Dim R As Excel.Range = X.Selection.CurrentRegion
X.Charts.Add()
With X.ActiveChart
.ChartType = -4100
.SetSourceData(R, 2)
.Location(1)
.Export(ruta & cboCategoria.Text & ".gif", "gif")
End With
End Sub
Notas:
- 68 -
- 69 -
15. Revisar que en la carpeta Bin se ha creado un archivo gif con un grfico de productos de dicha
categora.
16. Cerrar el Excel y si desea puede guardar el archivo.
17 Finalmente, cerrar la ventana para finalizar la aplicacin.
Cdigo del formulario frmConsultaProductosCategoria del Demo73
Imports System.Data.SqlClient
Public Class frmConsultaProductosCategoria
Private dvw As DataView
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection("uid=sa;server=(Local);database=northwind")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With cboCategoria
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
End With
dgdProducto.DataSource = dvw
End Sub
Private Sub FilltrarProductos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CboCategoria.SelectedIndexChanged
Try
dvw.RowFilter = "CategoryID=" & cboCategoria.SelectedValue
Catch ex As Exception
End Try
End Sub
Private Sub CrearGrafico(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnCrearGrafico.Click
Dim ruta As String = Application.StartupPath & "\Grafico de "
Dim X As New Excel.Application()
X.Visible = True
X.Workbooks.Add()
X.Cells(1, 1).Value = "Descripcion del Producto"
X.Cells(1, 2).Value = "Precio"
Dim I, F As Integer
F = 2
For I = 0 To dvw.Count - 1
X.Cells(F, 1).Value = dvw(I)(1)
X.Cells(F, 2).Value = dvw(I)(2)
F += 1
Next
X.Columns.AutoFit()
X.Range("A1").Select()
Dim R As Excel.Range = X.Selection.CurrentRegion
X.Charts.Add()
With X.ActiveChart
.ChartType = -4100
- 70 -
.SetSourceData(R, 2)
.Location(1)
.Export(ruta & CboCategoria.Text & ".gif", "gif")
End With
End Sub
End Class
Glosario de Trminos
A Continuacin un glosario de trminos usados ordenados alfabticamente:
ACID :
ActiveX:
ADO :
ADSI :
ANSI :
API
Array :
ASCII :
ASP
Assembly:
BLOB :
Breakpoint
CICS :
Clase :
CLI
CLR :
Collection:
COM :
Componente:
Constructor:
CURSOR:
DAO :
DataSet:
DDL
Destructor
DLL
EDP
Event Handler
Evento
GDI
GUI
GUID's
Herencia
IDE
IMS
Interface
ISAM
Items
MDAC
MDI
Mtodo
Miembro
MMC
Modo Depuracin
- 71 -
Modo Diseo
Cuando estamos creando la interface o escribiendo cdigo desde Visual Studio NET.
Modo Ejecucin
MSDE
NameSpace
Espacio de Nombres
Objeto
ODBC
OLEDDB
OOP
Polimorfismo
Proceso
Propiedad
RAD
RDO
RecordSet
ResultSet
RPC
RTF
- 72 -
SDI
SingleDocument Interface
Setup
ShortCut
ShortKey
Tecla de Acceso Corto a una opcin , por ejemplo pulsando ctrl. +Carcter
Thread
Hilo o subproceso
UDA
VSAM
XML
XSD
Enlaces de Internet
A continuacin, algunos enlaces de inters sobre Desarrollo de Aplicaciones Windows Forms con .NET que
recomiendo:
En Espaol
1. Microsoft Devel oper Network
http://www.msdn.microsoft.com/library/spa
2. Soporte para desarrollares Microsoft
http://support.microsoft.com
3. La Web del Guille de Espaa
h*tp://www.eIguilIe.info
4 La Web de WillyDev de Colombia
htrp:/Avww.wlydev.net
En Ingls
5. Sitio Oficial de Windows Forms .NET
http://www.windowsforms.net
6. Comunidad Oficial del .NET Framework
http:/Avww.gotdotnet.com
7. Preguntas a Respuestas Frecuentes sobre Windows Forms .NET
http://www.syncfusion.com/FAQ/WindowsForms/Dcfault.aspx