ld9 reporte datos

Upload: jessica-del-valle-cardenas

Post on 07-Jul-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Ld9 Reporte Datos

    1/72

    10. CREANDO REPORTES DE DATOS - 1 -

    10 CREANDO REPORTES DE DATOS

    1. Trabajando con Impresiones mediante DrawingEn este capítulo veremos dierentes ormas de crear e imprimir reportes o inormes de datos. Primerotra!a"aremos con la clase Dra#in$% lue$o usaremos Cr&stal Reports & inalmente tra!a"aremos con

    'icrosot Oice.Para (a!ilitar la impresi)n de reportes desde el .NET *rame#or+ (a& ,ue usar el NamespaceSstem.Drawing.Printing ,ue contiene o!"etos tiles para mane"ar tareas de impresi)n.

    1.1. !sando e" Objeto de Impresi#n

    El o!"eto de impresi)n permite crear un documento a imprimir% coni$urar sus características%enlaarlo a controles o di/lo$os para realiar su presentaci)n preliminar previe# & inalmente(a!ilita la impresi)n.

    1.1.1. C"ase PrintDoc$ment

    2a clase PrintDocument es la ,ue permite crear el o!"eto de impresi)n% por lo cual descri!imos sus

     principales características3% Propiedades

    DeaullPa$eSettin$s O!tiene o esta!lece la coni$uraci)n de p/$ina ,ue se utilia como predeterminada para todas las p/$inas ,ue se van a imprimir.

    DocumentName O!tiene o esta!lece el nom!re del documento ,ue va a aparecer por e"emplo3 en un cuadro de di/lo$o de estado de impresi)n o cola deimpresi)n mientras se imprime el documento.

    Ori$inAt'ar$ins O!tiene o esta!lece un valor ,ue indica si un o!"eto $r/ico asociado a una

     p/$ina est/ situado "usto dentro de los m/r$enes especiicados por elusuario o en la es,uina superior i,uierda del /rea de impresi)n de la p/$ina.

    PrintController O!tiene o esta!lece el dispositivo de impresi)n ,ue $uía el proceso deimpresi)n.

    PrinterSettin$s O!tiene o esta!lece la impresora ,ue imprime el documento.

    % &'todos

    Print 4nicia el proceso de impresi)n del documento.

    5 E(entos

    6e$inPrint Se produce cuando se llama al m7todo Print antes de ,ue se imprima la primera p/$ina del documento.

  • 8/18/2019 Ld9 Reporte Datos

    2/72

    10. CREANDO REPORTES DE DATOS - 8 -

     EndPrint Se produce cuando se (a impreso la ltima p/$ina del documento.

     PrintPa$e Se produce cuando se necesita el resultado ,ue se va a imprimir para la p/$ina actual.

    9uer&Pa$eSettin$s Se produce "usto antes de cada evento PrintPa$e.

    2a clase PrintDocument tam!i7n tiene propiedades como PrintContro""er & PrinterSett)ngs* ,ue permiten controlar la impresi)n% detectar las impresoras instaladas & la impresora por deecto dondesaldr/ la impresi)n.

    El nico m7todo de impresi)n es el Print ,ue permite enviar la salida del documento creado a laimpresora.

    El principal evento del o!"eto PrintDocument es el PrintPage ,ue permite crear el documento aimprimir% tal como veremos a continuaci)n.

    1.1.+. Creando "as P,ginas de" Doc$mento a Imprimir

    El proceso de creaci)n de las p/$inas a imprimir se realia en el evento PrintPage del o!"eto

    PrintDocument% el cual como todo procedimiento mane"ador de e:entos tiene dos par/metros3; Sender3 O!"ect; PrintPa$eEventAr$s

    Para crear el documento a imprimir% coni$urar sus m/r$enes% nmero de p/$inas% etc.% se de!e usar el par/metro PrintPageE(entArgs% el cual tiene las si$uientes propiedades3

    Cancel O!tiene o esta!lece un valor ,ue indica si se de!e cancelar el t ra!a"o deim resi)n.

  • 8/18/2019 Ld9 Reporte Datos

    3/72

    10. CREANDO REPORTES DE DATOS - > -

    .Drawlmage(/magen% Pos-% Pos)0as c1digo de impresi1nEnd WithEnd Su#

    Nota: El método DrawString permito dibujar textos y el método Drawlmage se usa paramostrar Imágenes, pero existen más métodos gráficos.

    /.  Si desea crear una nueva p/$ina coni$urar la propiedad =as'orePa$es del par/metroPrintPa$eEventAr$s en True3

     e.'asorePages 2 *rue

    1.1./. Rea"iando $n Pre(iew con e" PrintPre(iewContro"

    ?na ve construido el documento a imprimir en el evento PrintPa$e% lo ,ue si$ue es realiar la presentaci)n preliminar del documento Previe#. Esta se puede (acer de dos ormas3

    ; ?sando un control PrintPrevie#Control.

    ; ?sando un di/lo$o PrintPrevie#Dialo$.

    En esta parte veremos la primera orma de realiar un previe#% la cual es un poco limitada &a ,ue no

     presenta muc(as opc+nes de coni$uraci)n del previe# & adem/s tiene ,ue implementarse mediantec)di$o.

    El control ,ue permite realiar dic(a presentaci)n se llama el PrintPre(iewContro"* el cualdescri!imos a continuaci)n3

    % Propiedades

    Auto@oom O!tiene o esta!lece un valor ,ue indica si el cam!io de tamao del control o elcam!io de nmero de p/$inas ,ue se muestra autom/ticamente se a"usta a la propiedad @oom.

    Columns O!tiene o esta!lece el nmero de p/$inas ,ue aparecen en la pantalla con

    orientaci)n (oriontal.Document O!tiene o esta!lece un valor ,ue indica el documento del ,ue se va a o!tener 

    una vista previa.

    Ro#s O!tiene o esta!lece el nmero de p/$inas ,ue aparecen en la pantalla en sentidovertical.

    StartPa$e O!tiene o esta!lece el nmero de p/$ina de la p/$ina superior i,uierda.

    ?seAntiAlias O!tiene o esta!lece un valor ,ue indica si la impresi)n utilia la característicasde alisado del sistema operativo.

    @oom O!tiene o esta!lece un valor ,ue indica el tamao con el ,ue aparecer/n las p/$inas.

    % &'todos

    4nvalidatePrevie# Actualia la vista previa del document).

    % E(entos

     StartPa$eC(an$ed Se produce cuando cam!ia la p/$ina de inicio.

  • 8/18/2019 Ld9 Reporte Datos

    4/72

    10. CREANDO REPORTES DE DATOS - B -

    Para realiar un Previe# del documento a imprimir usando el control% de!emos escri!ir el si$uientec)di$o3

    1. Crear un o!"eto de tipo PrintPre(iewContro

    Dim ppc As New PrintPreviewControl

    +. Coni$urar la propiedad Doc$ment del PrintPrevie#Contro4 asi$nando el o!"eto

    PrintDocument ,ue tiene el documento a presentar3ppc.Document 2 pdt

    /. Crear un o!"eto de tipo ormulario en donde aparecer/ el control3

    Dim 3rm As New ,orm

    2. Aadir el o!"eto PrintPrevie#Contro4 a la colecci)n de controles del ormulario3

    3rm.Controls.Add(ppc)

    3. 'ostrar el ormulario como un di/lo$o3

    3rm.ShowDialog()

    1.1.2. Imprimiendo e" Doc$mento

    Despu7s de crear el documento & realiar la presentaci)n preliminar el si$uiente paso es imprimirlo% paralo cual se (ace uso del m7todo Print del o!"eto PrintDocument% tal como se muestra en el si$uientec)di$o3

    pdt.Print()

    % Demo 43

    Esta demostraci)n tiene por o!"etivo enserar a crear una p/$ina a imprimir con un simple mensa"emediante el o!"eto PrintDocument & realiar un previe# de 7sta mediante el controlPrintPrevie#Control.

    El e"emplo tra!a"a con un simple ormulario conteniendo un te:to & dos !otones donde se de!ein$resar un mensa"e% el cual se puede ver como saldr/ impreso mediante el !ot)n Previe# oimprimir mediante el !ot)n Print.

    Para ver la demostraci)n de!emos realiar los si$uientes pasos31. Crear una Aplicaci)n indo#s en Fisual 6asic .NET llamada DemoGH.

    +. En la ventana del e:plorador de soluciones seleccionar el arc(ivo *orm 1 & en la ventana de propiedades cam!iar la propiedad *ileName a 5rm"mpresion.

    /. En el diseador de ormularios indo#s% arrastrar 1 control 2a!el% 1 Te:t6o:% 8 6utton & 1PrintDocument% lue$o coni$urar las propiedades% tal como se muestra en el si$uiente cuadro3

    Ob jeto Propiedad Valor 

    Form1 NameFormBordertyle

    !aximi"eBox

    !inimi"eBox

    i"e

    tart#osition

    $ext

    frmImpresionFixedingle

    False

    False

    %idt&'()),*eig&t'())

    +entercreen

    Impresin en .NE$ con -raing

  • 8/18/2019 Ld9 Reporte Datos

    5/72

    10. CREANDO REPORTES DE DATOS - H -

    /abel1 Name

     0utoi"e

    /ocation

    $ext

    lbl!ensaje

    $rue

    '12, 3'14

    !ensaje a imprimir 

    $extBox1 Name/ocation

    !ultiline

    crollBars

    i"e

    $ext

    txt!ensaje*and

    $rue

    5ertical

    %idt&'426 , *eig&t' 177

    Button1 Name

    +ursor 

    /ocation

    i"e

    $ext

    btn#re8ie

    *and

    '12,3'4(2

    %idt&'9: *eig&t'4(

    Button4 Name

    +ursor 

    /ocation

    i"e

    $ext

    btn#rint

    *and

    '4)6,3'4(2

    %idt&'9: *eig&t'4(

    #rint-ocument Name pdt!ensaje

    2. En la ventana e:plorador de soluciones dar clic en el !ot)n Fie# Code.

    3. Crear el procedimiento de evento CrearPaginaImprimir* ,ue controle el evento PrintPa$e delo!"eto pdt'ensa"e & escri!ir7I si$uiente c)di$o3Private Su# CrearPagina/mprimir(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdtensa$e.PrintPage  Dim Brocha As New SolidBrush(t+tensa$e.,oreColor)  Dim - As /nteger 2 e.arginBounds.4e3t  Dim  As /nteger 2 e.arginBounds.*op  With e.raphics  .DrawString(t+tensa$e.*e+t% t+tensa$e.,ont% Brocha% -% )

      End With  End Su#

    Nota: En el código anterior las variables X e Y son usadas para imprimir el texto a partir delmargen actual.

    4. Crear el procedimiento de evento Pre(iewConContro"* ,ue controle el evento Clic+ del !ot)n!tnPrevie# & escri!ir el si$uiente c)di$o3Private Su# PreviewConControl(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPreview.Clic5  Dim ppcensa$e As New PrintPreviewControl()

  • 8/18/2019 Ld9 Reporte Datos

    6/72

    10. CREANDO REPORTES DE DATOS - G -

      With ppcensa$e  .Document 2 pdtensa$e  .Doc5 2 Doc5Stle.,ill  .6oom 2 7  End With  Dim 3rmPreview As New ,orm()  With 3rmPreview  .Controls.Add(ppcensa$e)

      .*e+t 2 8Preview con el PrintPreviewControl8  .WindowState 2 ,ormWindowState.a+imi9ed  .ShowDialog()  End With  End Su#

    Nota En el c)di$o anterior se coni$ura la propiedad @oom a 8 800J para ,ue se muestre el te:to un poco m/s $rande en el previe# & se aprecie me"or.

    6 Crear el procedimiento de evento ImprimirDoc$mento* ,ue ocurra en el evento Clic+K del !ot)n!tnPrint & escri!ir el si$uiente c)di$o3Private Su# /mprimirDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPrint.Clic5  pdtensa$e.Print()

      End Su#

      Nota: El método Print permite enviar la salida de la pagina creada en el evento PrintPage y vista en el Preview a la impresora.

    7. Coni$urar rm 4mpresi)n como el ormulario de inicio.

    8.

  • 8/18/2019 Ld9 Reporte Datos

    7/72

    10. CREANDO REPORTES DE DATOS - L -

    9ig$ra 10.+3 Fentana del ormulario rmPrevie# del DemoGH.

    Ad(ertencia3 Si no tiene impresoras instaladas se $enerar/ una E:cepci)n al mostrar el Previe# o mandar aimprimir.

    11. Cierre la ventana del Previe# & lue$o si tiene una impresora instalada clic en el !ot)n Print para realiar la impresi)n.

    1+. *inalmente% cierre la ventana para salir de la aplicaci)n

    CODI-O de" 5orm$"ario 5rmPre(iew de" Demo43Pu#lic Class 3rm/mpresion  /nherits Sstem.Windows.,orms.,orm  Private Su# CrearPagina/mprimir(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdtensa$e.PrintPage  Dim Brocha As New SolidBrush(t+tensa$e.,oreColor)  Dim - As /nteger 2 e.arginBounds.4e3t  Dim  As /nteger 2 e.arginBounds.*op  With e.raphics

      .DrawString(t+tensa$e.*e+t% t+tensa$e.,ont% Brocha% -% )  End With  End Su#  Private Su# PreviewConControl(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPreview.Clic5  Dim ppcensa$e As New PrintPreviewControl()  With ppcensa$e  .Document 2 pdtensa$e  .Doc5 2 Doc5Stle.,ill  .6oom 2 7  End With  Dim 3rmPreview As New ,orm()  With 3rmPreview

      .Controls.Add(ppcensa$e)  .*e+t 2 8Preview con el PrintPreviewControl8  .WindowState 2 ,ormWindowState.a+imi9ed  .ShowDialog()  End With  End Su#  Private Su# /mprimirDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPrint.Clic5  pdtensa$e.Print()  End Su#End Class

  • 8/18/2019 Ld9 Reporte Datos

    8/72

    10. CREANDO REPORTES DE DATOS - M -

    % Demo 44

    Esta demostraci)n tiene por o!"etivo ensear a crear una pa$ina a imprimir con datos desde una !ase dedatos mediante el o!"eto PrintDocument & realiar un previe# de 7sta mediante el controlPrintPrevie#Control.

    El e"emplo tra!a"a con un ormulario ,ue al car$ar se conecta a la !ase de datos Nort(ind de S92Server & e"ecuta un comando ,ue llena una ta!la de un DataSet con los c)di$os% apellidos & nom!resde los Empleados. A partir de esta ta!la se crea una vista la cual se enlaa a un control Data

  • 8/18/2019 Ld9 Reporte Datos

    9/72

    10. CREANDO REPORTES DE DATOS - -

    !enuItem14 Name

    $ext

    mnu#rint

    #rint

    3. En la ventana e:plorador de soluciones dar clic en el !ot)nFie# Code.

    4. En la parte superior del c)di$o antes de la clase deinir los Namespace del proveedor de S92 & de mane"o de cadenas de te:to3/mports Sstem.Data.S:lClient/mports Sstem.*e+t 0StringBuilder mane$a cadenas

    6. Declarar una varia!le privada para la vista de Empleados3

    Private dvw As Data!iew

    7. Crear el procedimiento de evento CargarDatos ,ue mane"e elevento 2oad del ormulario & escri!ir el si$uiente c)di$o3Private Su# CargarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  Dim con As New S:lConnection(CadenaCone+ion)  Dim dap As New S:lDataAdapter(8Select Emploee/D%4astName%,irstName

    ,rom Emploees8% con)  Dim dst As New DataSet()  dap.,ill(dst% 8Empleados8)  dvw 2 dst.*a#les(8Empleados8).De3ault!iew  dgdEmpleado.DataSource 2 dvw  End Su#

    8. Crear el procedimiento de evento CrearPagina% ,ue controleel evento PrintPa$e del o!"eto pdt & escri!ir el si$uiente c)di$o3Private Su# CrearPagina(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdt.PrintPage  Dim i As /nteger  Dim st# As New StringBuilder()

      Dim *e+to As String  Dim ,uente As New ,ont(8Courier New8% ;ight(;?))  *e+to 2 st#.*oString  e.raphics.DrawString(*e+to% ,uente% Brocha% -% )  2 @ ,uente.et'eight  st#.4ength 2 <  Ne+t  End Su#

    Nota En el c)di$o anterior para concatenar usamos el o!"eto Str)ng:$i"der &a ,ue si lo (acemos con losoperadores o por cada llamada crearíamos un o!"eto Strin$% en cam!io usando un s)lo o!"etoStrín$6uilder podemos realiar muc(as concatenaciones con el m7todo A ppend.

    10.   Crear el procedimiento de evento &ostrarPre(iew% ,uecontrole el evento Clic+Q del men mnuPrevie# & escri!ir el si$uiente c)di$o3Private Su# ostrarPreview(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPreview.Clic5  Dim ppc As New PrintPreviewControl()

  • 8/18/2019 Ld9 Reporte Datos

    10/72

    10. CREANDO REPORTES DE DATOS - 10 -

      ppc.Document 2 pdt  ppc.6oom 2 ;  ppc.Doc5 2 Doc5Stle.,ill  Dim 3rmPreview As New ,orm()  With 3rmPreview  .*e+t 2 8Preview del >eporte de Empleados8  .WindowState 2 ,ormWindowState.a+imi9ed  .Controls.Add(ppc)

      .ShowDialog()  End With

      End Su#

     Nota: En el código anterior se configura la propiedad Zoom a 1 (100%) para ue se - ! muestrelos datos de los empleados.

    11. Crear el procedimiento de evento ImprimirReporte% ,ue ocurra en el evento Clic+ de menmnuPrint & escri!ir el si$uiente c)di$o3Private Su# /mprimir>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPrint.Clic5  pdt.Print()  End Su#

    1+. Coni$urar rmReporteEmpleado como el ormulario de inicio1/.

  • 8/18/2019 Ld9 Reporte Datos

    11/72

    10. CREANDO REPORTES DE DATOS - 11 -

    9ig$ra 10.2 Fentana del ormulario rmPrevie# del DemoGG.

    Ad(ertencia3 Si no tiene impresoras instaladas se $enerar/ una E:cepci)n al mostrar el Previe# omandar a imprimir.

    13 Cerre la ventana del Prevíe# & lue$o si tiene una impresora instalada seleccione del men ReporteQ laopci)n Print para realiar la impresi)n.

    14 *inalmente% cierre la ventana para salir de la aplicaci)n.

    C#digo de" 5orm$"ario 5rmPre(iew de" Demo44/mports Sstem.Data.S:lClient/mports Sstem.*e+t 0StringBuilder mane$a cadenasPu#lic Class 3rm>eporteEmpleado  /nherits Sstem.Windows.,orms.,orm  Private dvw As Data!iew  Dim CadenaCone+ion As String 2 8Persist Securit /n3o2,alse/ntegratedSecurit2SSP//nitial Catalog2Northwindserver2(local)8

      Private Su# CargarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  Dim con As New S:lConnection(CadenaCone+ion)  Dim dap As New S:lDataAdapter(8Select Emploee/D%4astName%,irstName,rom Emploees8% con)  Dim dst As New DataSet()  dap.,ill(dst% 8Empleados8)  dvw 2 dst.*a#les(8Empleados8).De3ault!iew  dgdEmpleado.DataSource 2 dvw  End Su#  Private Su# CrearPagina(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdt.PrintPage  Dim i As /nteger

      Dim st# As New StringBuilder()  Dim *e+to As String  Dim ,uente As New ,ont(8Courier New8% ;ight(;?))  *e+to 2 st#.*oString

  • 8/18/2019 Ld9 Reporte Datos

    12/72

    10. CREANDO REPORTES DE DATOS - 18 -

      e.raphics.DrawString(*e+to% ,uente% Brocha% -% )  2 @ ,uente.et'eight  st#.4ength 2 <  Ne+t  End Su#  Private Su# ostrarPreview(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPreview.Clic5  Dim ppc As New PrintPreviewControl()

      ppc.Document 2 pdt  ppc.6oom 2 ;  ppc.Doc5 2 Doc5Stle.,ill  Dim 3rmPreview As New ,orm()  With 3rmPreview  .*e+t 2 8Preview del >eporte de Empleados8  .WindowState 2 ,ormWindowState.a+imi9ed  .Controls.Add(ppc)  .ShowDialog()  End With  End Su#  Private Su# /mprimir>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPrint.Clic5

      pdt.Print()  End Su#End Class

    1.+. !sando Di,"ogos de Impresi#nEn esta parte veremos como tra!a"ar con los di/lo$os de impresi)n% los cuales se pueden usar "unto alo!"eto PrintDocument para realiar una me"or presentaci)n & coni$uraci)n de la impresi)n.

    2os di/lo$os de impresi)n son >3

    • Di/lo$o de Presentaci)n Preliminar de 4mpresi)n PrintPrevie#Dialo$.

    • Di/lo$o de Coni$uraci)n de P/$ina de 4mpresi)n Pa$eSetupDialo$.

    • Di/lo$o de 4mpresi)n PrintDialo$.

    1.+.1. Rea"iando $n Pre(iew con e" PrintPre(iewDia"og

    Despu7s de crear el documento a imprimir en el evento PrintPa$e del o!"eto PrintDocument podemosrealiar una me"or presentaci)n preliminar de 7ste% usando el di/lo$o de previe#% el cual tieneuncionalidad preconstruida para poder (acer oom% ver varias p/$inas% imprimir% etc.

    Como todo di/lo$o% el o!"eto PrintPrevie#Dialo$ (ereda de la clase CommonDialo$% pero tiene lassi$uientes propiedades adicionales3

    Document O!tiene o esta!lece el documento del ,ue se desea la vista previa.

    ?scAntiAlias O!tiene o esta!lece un valor ,ue indica si la impresi)n utilia lacaracterísticas de alisado del sistema operativo.

    Para tra!a"ar con el di/lo$o de Previe#% tan s)lo (a& ,ue coni$urar la propiedad Document del di/lo$oen el o!"eto Prin Document% tal como si$ue3

    o#$PrintPreviewDialog.Document o#$PrintDocument

    1.+.+. Con5ig$rando "a P,gina con e" PageSet$pDia"og

    Tam!i7n podemos coni$urar la p/$ina a imprimir mediante un di/lo$o% en donde podemos

  • 8/18/2019 Ld9 Reporte Datos

    13/72

    10. CREANDO REPORTES DE DATOS - 1> -

    modiicar el tipo de papel% el mar$en% la orientaci)n% etc.

    Para esto se usa el o!"eto PageSet$pDia"og% el cual tiene las si$uientes propiedades3

    Allo#'ariins O!tiene o esta!lece un valor ,ue indica si est/ (a!ilitada la secci)n dem/r$enes del cuadro de di/lo$o.

    Allo#Orientation O!tiene o esta!lece un valor ,ue indica si est/ (a!ilitada la secci)n deorientaci)n (oriontal o vertical del cuadro de di/lo$o.

    Allo#Paper O!tiene o esta!lece un valor ,ue indica si se (a!ilita la secci)n de papel tamao& ori$en de papel del cuadro de di/lo$o.

    Allo#Printer O!tiene o esta!lece un valor ,ue indica si el !ot)n 4mpresora est/ (a!ilitado.

    Document O!tiene o esta!lece un valor ,ue indica el PrintDocument del ,ue se o!tendr/la coni$uraci)n de p/$ina.

    'in'ar$ins O!tiene o esta!lece un valor ,ue indica los m/r$enes mínimos ,ue se permiteseleccionar al usuario en cent7simas de pul$ada.

    Pa$eSettin$ O!tiene o esta!lece un valor ,ue indica la coni$uraci)n de p/$ina ,ue se va amodiicar.

    PrinterSettin$s O!tiene o esta!lece la coni$uraci)n de impresora ,ue se modiica cuando elusuario (ace clic en el !ot)n 4mpresora del cuadro de di/lo$o.

    S(o#=elp O!tiene o esta!lece un valor ,ue indica si est/ visi!le el !ot)n A&uda.

    S(o#Net#or+ O!tiene o esta!lece un valor ,ue indica si est/ visi!le el !ot)n Red.

    Para tra!a"ar con el di/lo$o de coni$uraci)n de p/$ina (a& ,ue coni$urar la propiedad Document deldi/lo$o en el o!"eto PrintDocument% tal como si$ue3

    o#$PageSetupDialog.Document 2 o#$PrintDocument

     Para mostrar el di/lo$o de coni$uraci)n de p/$ina llamar al m7todo SowDia"og3

    o#$ PageSetupDialog.ShowDialog()

    Adem/s para recuperar toda la coni$uraci)n del di/lo$o para ,ue pueda ser usada por la impresi)n%asi$nar en la propiedad De5a$"tPageSettings del o!"eto PrintDocument la propiedad PageSettings deldi/lo$o% tal como si$ue3

    o#$ PrintDocument.De3aultPageSettings 2 o#$ PageSetupDialog.PageSettings

     Nota:  El di"logo de configuración de p"gina autom"ticamente reali#a este $ltimo paso es decir toda la

    configuración seleccionada por el usuario en el di"logo es autom"ticamente asignada al o&'eto Printocument.

    1.+./. Con5ig$rando "a Impresi#n con e" PrintDia"og*inalmente% podemos presentar un di/lo$o de impresi)n donde podamos seleccionar la impresora% elnmero de p/$inas% el ran$o de p/$inas% el nmero de copias% $uardar en un arc(ivo% etc.

    Para esto se usa el o!"eto PrintDia"og* el cual tiene las si$uientes propiedades3

    Allo#PnntTo*ile O!tiene o esta!lece un valor ,ue indica si la casilla de veriicaci)n 4mprimir aun arc(ivo est/ activada.

  • 8/18/2019 Ld9 Reporte Datos

    14/72

    10. CREANDO REPORTES DE DATOS - 1B -

    Allo#Selection O!tiene o esta!lece un valor ,ue indica si est/ (a!ilitado el !ot)n de opci)nP/$ina desde... (asta...

    Allo#SomePa$es O!tiene o esta!lece un valor ,ue indica si se (a!ilita el !ot)n de opci)nP/$inas.

    Document O!tiene o esta!lece un valor ,ue indica el PrintDocument del ,ue se

    o!tendr/ PrinterSettin$s.

    PrinterSettin$s O!tiene o esta!lece la coni$uraci)n de impresora ,ue se modiica en el cuadrode di/lo$o.

    PrintTo*ile O!tiene o esta!lece un valor ,ue indica si la casilla de veriicaci)n 4mprimir aun arc(ivo est/ activada.

    S(o#=elp O!tiene o esta!lece un valor ,ue indica si se muestra el !ot)n A&uda.

    S(o#Net#or+ O!tiene o esta!lece un valor ,ue indica si se muestra el !ot)n Red.

    Para tra!a"ar con el di/lo$o de impresi)n% tam!i7n (a& ,ue coni$urar la propiedad Doc$ment deldi/lo$o en el o!"eto PrintDocument% tal como si$ue3

    o#$PrintDialog.Document 2 o#$PrintDocument

    % Demo 46

    Esta demostraci)n tiene por o!"etivo ensear a crear una pa$ina a imprimir con un simple mensa"emediante el o!"eto PrintDocument & usar los di/lo$os de presentaci)n preliminar% de coni$uraci)n de p/$ina & de impresi)n.

    El e"emplo es similar al DemoGH% es decir% tra!a"a con un simple ormulario conteniendo un te:to & tres !otones donde se de!e in$resar un mensa"e% el cual se puede ver como saldr/ impreso mediante el !ot)nPrevie#% coni$urar la p/$ina mediante el !ot)n Pa$e Setup o imprimir mediante el !ot)n Print.

    Para ver la demostraci)n de!emos realiar los si$uientes pasos3

    1. Crear una Aplicaci)n indo#s en Fisual 6asic .NET llamada DemoGL.

    +. En la ventana del e:plorador de soluciones seleccionar el arc(ivo *orm 1 & en la ventana de propiedades cam!iar la propiedad *ileName a 5rm"mpresion.

    /. En el diseador de ormularios indo#s% arrastrar un control 2a!el% un Te:t6o:% tres 6utton% unPrintDocument% un PrintPrevie#Dialo$% un Pa$eSetupDialo$ & un PrintDialo$% lue$o coni$urar las propiedades% tal como se muestra en el si$uiente cuadro3

    Objeto Propiedad Valor  

    Form1 Name

    FormBordertyle

    !aximi"eBox

    !inimi"eBox

    i"e

    tart#osition

    frmImpresion

    Fixedingle

    False

    False

    %idt&'()),*eig&t'())

    +entercreen

  • 8/18/2019 Ld9 Reporte Datos

    15/72

    10. CREANDO REPORTES DE DATOS - 1H -

    $ext Impresiones en .NE$ con -raing

    /abel1 Name

     0utosi"e

    /ocation

    $ext

    lbl!ensaje

    $rue

    '12. 3'14

    !ensaje a Imprimir $exBox1 Name

    /ocation

    !ultiline

    crollBars

    i"e

    $ext

    txt!ensaje

    '12, 3'(2

    $rue

    5ertical

    %idt&'42,*eig&t'177

    Button1 Name

    +ursor 

    /ocation

    i"e

    $ext

    btn#re8ie

    *and

    '12, 3'4(2

    %idt&'9:, *eig&t'4(

    #re8ie

    Button4 Name

    +ursor 

    /ocation

    i"e

    $ext

    btn#ageetup

    *and

    '11), 3'4(2

    %idt&'9:, *eig&t'4(

    #age etup

    Button( Name

    +ursor 

    /ocation

    i"e

    $ext

    btn#rint

    *and

    '4)6, 3'4(2

    %idt&'9:, *eig&t'4(

    #rint

    #rint-ocument1 Name pdt!ensaje

    #rint#re8ie-ialog1 Name ppd!ensaje#ageetup-ialog Name psd!ensaje

    #rint-ialog1 Name pdg!ensaje

    2. En la ventana e:plorador de soluciones dar clic en el !ot)n Fie# Code.

    3. Crear el procedimiento de evento CrearPagina"mprimir% ,ue controle el evento PrintPa$e delo!"eto pdt'ensa"e & escri!ir el si$uiente c)di$o3  Private Su# CrearPagina/mprimir(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdtensa$e.PrintPage

  • 8/18/2019 Ld9 Reporte Datos

    16/72

    10. CREANDO REPORTES DE DATOS - 1G -

      Dim Brocha As New SolidBrush(t+tensa$e.,oreColor)  Dim - As /nteger 2 e.arginBounds.4e3t  Dim  As /nteger 2 e.arginBounds.*op  With e.raphics  .DrawString(t+tensa$e.*e+t% t+tensa$e.,ont% Brocha% -% )  End With  End Su#

     Nota: En el código anterior las varia&les e * son usadas para imprimir el te+to a partir del margenactual.

    4. Crear el procedimiento de evento Pre(iewConDia"ogo% ,ue controle el evento Clic+ del !ot)n!tnPrevie# & escri!ir el si$uiente c)di$o3Private Su# PreviewConDialogo(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPreview.Clic5  With ppdensa$e 0Dialogo de Preview  .Document 2 pdtensa$e  .*e+t 2 8Preview usando PrintPreviewDialog8  .WindowState 2 ,ormWindowState.a+imi9ed  .ShowDialog()  End With  End Su#

    Nota3 En el c)di$o anterior no se coni$ura el oom por c)di$o &a ,ue el di/lo$o autom/ticamente presenta !otones de @oom & otros !otones.

    6. Crear el procedimiento de evento Con5ig$rarPagina% ,ue ocurra en el evento Clic+ del !ot)n!tnPa$eSetup & escri!ir el si$uiente c)di$oPrivate Su# Con3igurarPagina(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPageStetup.Clic5  With psdensa$e 0Dialogo de Page Setup  .Document 2 pdtensa$e  .ShowDialog()  End With  End Su#

    Nota3 En el c)di$o anterior no se coni$ura el DeaultPa$eSettin$s del PríntDocument &a ,ue el di/lo$o lo realiaen orma autom/tica.

    7.  Crear el procedimiento de evento ImprimirDoc$mento% ,ue ocurra en el evento Clic+ del !ot)n!tnPrint & escri!ir el si$uiente c)di$o3Private Su# /mprimirDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPrint.Clic5  With pdgensa$e 0Dialogo de Print  .Document 2 pdtensa$e  .AllowPrint*o,ile 2 ,alse  .AllowSelection 2 *rue  .AllowSomePages 2 *rue  /3 .ShowDialog() 2 Dialog>esult." *hen

      pdtensa$e.PrinterSettings 2 .PrinterSettings  pdtensa$e.Print()  End /3  End With  End Su#

    Nota3 En el c)di$o anterior se coni$ura las propiedades Allo# del di/lo$o para permitir mostrar selecci)n de p/$inas en el di/lo$o de impresi)n. Tam!i7n si el . usuario da clic en el !ot)n O del dialo$o de imprimir%entonces% se imprime el contenido del cuadro de te:to.

    8. Coni$urar rmlmpresion como el ormulario de inicio.

  • 8/18/2019 Ld9 Reporte Datos

    17/72

    10. CREANDO REPORTES DE DATOS - 1L -

    10.

  • 8/18/2019 Ld9 Reporte Datos

    18/72

    10. CREANDO REPORTES DE DATOS - 1M -

    9ig$ra 10.6 Di/lo$o de Coni$urar P/$ina del DemoGL.

    1/. Proceda a coni$urar la p/$ina cam!iando el tamao del papel% la orientaci)n & los m/r$enes%lue$o clic en Aceptar para cerrar el di/lo$o & realiar los cam!ios.

    12.  Nuevamente de clic en el !ot)n Previe# para ver la presentaci)n de la p/$ina con los cam!ios

    realiados% despu7s cierre el di/lo$o de Previe#.13. Clic en el !ot)n Print & se presentar/ el di/lo$o de impresi)n% similar al mostrado en la i$ura

    10.M

  • 8/18/2019 Ld9 Reporte Datos

    19/72

  • 8/18/2019 Ld9 Reporte Datos

    20/72

    10. CREANDO REPORTES DE DATOS - 80 -

      Private Su# /mprimirDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnPrint.Clic5  With pdgensa$e 0Dialogo de Print  .Document 2 pdtensa$e  .AllowPrint*o,ile 2 ,alse  .AllowSelection 2 *rue  .AllowSomePages 2 *rue

      /3 .ShowDialog() 2 Dialog>esult." *hen  pdtensa$e.PrinterSettings 2 .PrinterSettings  pdtensa$e.Print()  End /3  End With  End Su#

    End Class

    % Demo 47

    =asta el momento todos los documentos ,ue (emos creado para imprimir tenían una simple p/$ina.Esta demostraci)n tiene por o!"etivo ensear a crear un documento con varias p/$inas de datoso!tenidos desde una !ase de datos. En 7sta tra!a"aremos con todos los di/lo$os de impresi)n.

    El e"emplo tra!a"a con un ormulario ,ue al car$ar se conecta a la !ase de datos Nort(ind de S92Server & e"ecuta un comando ,ue llena una ta!la de un DataSet con los c)di$os de )rdenes% ec(a de)rdenes & c)di$o de los clientes de la ta!la Ordenes. A partir de esta ta!la se crea una vista la cual seenlaa a un control Data

  • 8/18/2019 Ld9 Reporte Datos

    21/72

    10. CREANDO REPORTES DE DATOS - 81 -

    #rint#re8ie-ialog1  Name

    #pd

    #ageetup-ialog  Name

    #sd

    #rint-ialog1  Name

    #dg

    2. Seleccione el componente &ain&en$ & en la parte superior donde dice T&pe =ere% escri!adirectamente los te:tos del men & coni$ure sus propiedades% tal como se muestra en el si$uientecuadro3

    Objeto Propiedad Valor  

    !enuItem1 Name

    $ext

    !nu;eporte

    ;eporte

    !enuItem11 Name

    $ext

    !nu#re8ie

    ;eporte

    !enuItem14 Name

    $ext

    !nu#ageetup

    #ageetup!enuItem1( Name

    $ext

    !nu#rint

    #rint

    3. En la ventana e:plorador de soluciones dar clic en el !ot)n Fie# Code.

    4. En la parte superior del c)di$o antes de la clase deinir los Namespace del proveedor de S92 & demane"o de cadenas de te:to3/mports Sstem.Data.S:lClient/mports Sstem.*e+t 0StringBuilder mane$a cadenas

    6. Declarar dos varia!les privadas% una para la vista de Empleados & otra para la posici)n delre$istro en la vista contador de re$istro3  Private dvw As Data!iew  Private cr As /nteger

    7. Crear el procedimiento de evento CargarDatos ,ue mane"e el evento 2oad del ormulario &escri!ir el si$uiente c)di$o3Private Su# CargarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  Dim con As New S:lConnection(CadenaCone+ion)  Dim dap As New S:lDataAdapter(8Select "rder/D%"rderDate%Customer/D,rom "rders8% con)  Dim dst As New DataSet()  dap.,ill(dst% 8"rdenes8)  dvw 2 dst.*a#les(8"rdenes8).De3ault!iew

      dgd"rden.DataSource 2 dvw  End Su#

    8. Crear el procedimiento de evento CrearDoc$mento% ,ue controle el evento PrintPa$e del o!"etopdt & escri!ir el si$uiente c)di$o3Private Su# CrearDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdt.PrintPage  Dim i As /nteger  Dim st# As New StringBuilder()  Dim *e+to As String  Dim ,uente As New ,ont(8Courier New8% ;

  • 8/18/2019 Ld9 Reporte Datos

    22/72

    10. CREANDO REPORTES DE DATOS - 88 -

      Dim Brocha As Brush 2 Brushes.Blue  Dim - As /nteger 2 e.arginBounds.4e3t  Dim  As /nteger 2 e.arginBounds.*op  Dim 4P As /nteger 2 e.arginBounds.'eight ,uente.et'eight  ,or i 2 < *o 4P  /3 cr 2 dvw.Count = ; *hen E+it Su#  st#.Append(dvw(cr)(ight(;?))  st#.Append(dvw(cr)(;).*oString.Pad>ight(ight(;?))  *e+to 2 st#.*oString  e.raphics.DrawString(*e+to% ,uente% Brocha% -% )  2 @ ,uente.et'eight  st#.4ength 2 <  cr 2 cr @ ;  Ne+t  e.'asorePages 2 cr F dvw.Count = ;  End Su#

    Notas• Para ,ue los te:tos de las columnas sal$an del mismo anc(o se usa la uente Courier Ne#.• Para a(orrar memoria al momento de concatenar se usa el o!"eto String:$i"der.

    • 2a cantidad de líneas a imprimir de una p/$ina 2P es o!tenida dividiendo el alto del mar$en entre el alto de lauente.

    • Para crear una nueva p/$ina se usa la propiedad ;as&orePage en True s)lo cuando el contador de re$istroscr sea menor al índice del ltimo re$istro d(w.Co$ntesult." *hen  pdt.PrinterSettings 2 pdg.PrinterSettings  pdt.Print()  End /3  End Su#

    1/. Coni$urar rmReporteOrden como el ormulario de inicio.12.

  • 8/18/2019 Ld9 Reporte Datos

    23/72

    10. CREANDO REPORTES DE DATOS - 8> -

    9ig$ra 10.3 Fentana del ormulario rmReporteOrden del DemoGM.

    13. Del men Reporte seleccionar la opci)n Previe# & se mostrar/ el di/lo$o de presentaci)n preliminar similar a la i$ura 10.10

    9ig$ra 10.10 Di/lo$o de Presentaci)n Preliminar del DemoObservación- ,ea como.el documento tiene 1 p"ginas creadas para imprim

    14. Cierre la ventana del Previe#% lue$o si desea coni$ure la p/$ina o realie la impresi)n mediante lasotras opciones del men de Reportes.

    16. *inalmente% cierre la ventana para salir de la aplicaci)n

    Codigo de" 5rmReporteOrden de" Demo47/mports Sstem.Data.S:lClient/mports Sstem.*e+t 0StringBuilder mane$a cadenasPu#lic Class 3rm>eporte"rden  /nherits Sstem.Windows.,orms.,orm  Private dvw As Data!iew

  • 8/18/2019 Ld9 Reporte Datos

    24/72

    10. CREANDO REPORTES DE DATOS - 8B -

      Private cr As /nteger  Dim CadenaCone+ion As String 2 8Persist Securit /n3o2,alse/ntegratedSecurit2SSP//nitial Catalog2Northwindserver2(local)8  Private Su# CargarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  Dim con As New S:lConnection(CadenaCone+ion)  Dim dap As New S:lDataAdapter(8Select "rder/D%"rderDate%Customer/D ,rom"rders8% con)

      Dim dst As New DataSet()  dap.,ill(dst% 8"rdenes8)  dvw 2 dst.*a#les(8"rdenes8).De3ault!iew  dgd"rden.DataSource 2 dvw  End Su#  Private Su# CrearDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.Drawing.Printing.PrintPageEventArgs) 'andles pdt.PrintPage  Dim i As /nteger  Dim st# As New StringBuilder()  Dim *e+to As String  Dim ,uente As New ,ont(8Courier New8% ;ight(ight(;?))  *e+to 2 st#.*oString  e.raphics.DrawString(*e+to% ,uente% Brocha% -% )  2 @ ,uente.et'eight  st#.4ength 2 <  cr 2 cr @ ;  Ne+t  e.'asorePages 2 cr F dvw.Count = ;

      End Su#  Private Su# ostrarPreview(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPreview.Clic5  ppd.Document 2 pdt  ppd.ShowDialog()  End Su#  Private Su# Con3igurarPagina(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPageSetup.Clic5  psd.Document 2 pdt  psd.ShowDialog()  End Su#  Private Su# /mprimir>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles mnuPrint.Clic5

      pdg.Document 2 pdt  /3 pdg.ShowDialog() 2 Dialog>esult." *hen  pdt.PrinterSettings 2 pdg.PrinterSettings  pdt.Print()  End /3  End Su#End Class

    +. Trabajando Reportes con Crsta" ReportsEn esta se$unda parte ensearemos a crear & usar reportes mediante la (erramienta Cr&stal Reports%

  • 8/18/2019 Ld9 Reporte Datos

    25/72

    10. CREANDO REPORTES DE DATOS - 8H -

     primero daremos una !reve revisi)n so!re 7ste% lue$o veremos sus componentes & inalmenteensearemos a crear reportes o inormes & a mostrarlos en nuestras aplicaciones indo#s *orms .NET.

    +.1. :re(e Re(isi#n sobre Crsta" Reports

    Cr&stal Reports para Fisual Studio .NET es la (erramienta de ela!oraci)n de inormes est/ndar paraFisual Studio .NET Permite crear contenido interactivo con calidad de presentaci)n en la

     plataorma .NET% lo ,ue (a supuesto una venta"a undamental para Cr&stal Reports durante aos.+.1.1. Introd$cci#n

    Para presentar datos a los usuarios% puede escri!ir c)di$o de modo ,ue se lean con"untos de re$istrosde manera cíclica para lue$o imprimirlos en una aplicaci)n e! o de indo#s. Sin em!ar$o% entra!a"os ,ue no se a"usten a un ormato !/sico podría resultar complicado3 resulta comple"a la pro$ramaci)n de consolidaciones% totales de varios niveles% $r/icos & ormatos condicionales.

    Con Cr&stal Reports para Fisual Studio .NET% puede crear r/pidamente inormes comple"os deapariencia proesional. En lu$ar de utiliar pro$ramaci)n% la intera de Cr&stal Report Desi$ner le permite crear & dar ormato al inorme ,ue desee. El eica motor de inormes procesa los criterios deormato% a$rupamiento & creaci)n de $r/icos ,ue especii,ue.

    +.1.+. Asistente de In5ormes

    2os asistentes de Cr&stal Report permiten crear r/pidamente inormes en unci)n de las necesidadesde desarrollo3

    • Seleccionar la opci)n de diseo de inormes ,ue le interese% desde inormes est/ndar (asta cartasmodelo% o !ien cree sus propios inormes partiendo de cero.

    • 'ostrar $r/icos en los ,ue los usuarios puedan proundiar con el in de ver datos detallados delos inormes.

    • Calcular resmenes% su!totales & porcenta"es de datos a$rupados.

    'ostrar resultados de datos de N Superiores & N 4neriores.• Dar ormato al te:to & rotar o!"etos de te:to cuando se cumplan determinadas condiciones.

    +.1./. =entajas de In5ormes

    Cr&stal Reports para Fisual Studio .NET es un componente inte$rado del entorno de desarrollo deFisual Studio .NET. Esta inte$raci)n proporciona a los usuarios las si$uientes venta"as relacionadascon la ela!oraci)n de inormes% las cuales la podemos dividir en dos3

    1. Para Programadores

    • Selecci)n del len$ua"e & del pro&ecto3

    ?tilice el len$ua"e de pro$ramaci)n ,ue desee & o!ten$a acceso a Cr&stal Report Desi$ner desdecual,uier pro&ecto.

    • ?so de los visores de inormes3 sin clientes e! & varios clientes indo#s3

    Cr&stal Reports para Fisual Studio .NET proporciona dos visores de inormes con los ,ue puedever inormes en aplicaciones3 utilice e! *orms Fie#er para las aplicaciones e! & indo#s*orms Fie#er para las aplicaciones de indo#s.

    ?na ve seleccionado el marco de desarrollo. Cr&stal Reports proporciona el visor de inormesadecuado para la aplicaci)n & para el len$ua"e de desarrollo utiliados. Estos visores de

  • 8/18/2019 Ld9 Reporte Datos

    26/72

    10. CREANDO REPORTES DE DATOS - 8G -

    inormes tam!i7n se pueden personaliar puede cam!iar la apariencia & las opcionesdisponi!les de la !arra de (erramientas.

    • Personaliaci)n de visores para interactuar con otros controles3

    Durante el diseo% inicie las propiedades de e! *orms Fie#er & indo#s *orms Fie#er. O !ien%coni$ure e! *orms Fie#er o indo#s *orms Fie#er para interactuar con otros controles en

    tiempo de e"ecuci)n. 2a personaliaci)n en tiempo de e"ecuci)n permite a los usuarios ver distintos inormes o cam!iar el ormato% la selecci)n de datos o las opciones de e:portaci)n deun inorme e:istente.

    • 'odelo de o!"etos enri,uecido3

    El modelo de o!"etos de inorme ,ue muestra el motor de inormes permite aadir c)di$o alarc(ivo de c)di$o uente de la p/$ina de indo#s *orms% lo ,ue permite ,ue el controlindo#s *orms Fie#er interacte con otros controles de la misma p/$ina.

    Por e"emplo% el control indo#s *orms puede interactuar con un !ot)n o un cuadrocom!inado para proporcionar a los usuarios opciones de e:portaci)n & ormato de inormes.

    +. Para !s$arios

    ; Fisualiaci)n de Cr&stal Reports en el e!.

    Si desarrolla una aplicaci)n e! ,ue conten$a un inorme o un servicio e! de inormes% todoslos procesos se realian en el servidor. 2os usuarios s)lo necesitan un e:plorador e!. 2auncionalidad de los inormes es la misma en el e! ,ue en una aplicaci)n de indo#s.

    ; Acceso a inormes perectamente inte$rados3

    2os usuarios no necesitan sa!er ,ue est/n accediendo a un inorme cuando (acen clic en un$r/ico de una aplicaci)n e! o de indo#s. El control del visor de inormes puede ser uno delos muc(os controles de la aplicaci)n.

    ; */cil interacci)n con los inormes3

    2os usuarios pueden iltrar la inormaci)n de los inormes (aciendo clic en un !ot)n oseleccionando una opci)n de un cuadro com!inado% &a ,ue Cr&stal Reports para FisualStudio .NET puede interactuar con otros controles.

    ; E:portaci)n de inormes3

    2os usuarios pueden e:portar inormes a ormatos de 'icrosot ord & E:cel% así como aormatos PD*% =T'2 & Cr&stal Reports para Fisual Studio .NET.

    +.+. Ar>$itect$ra de Crsta" Reports

    2a inalidad de esta secci)n es e:plicar el uso del indo# *orms Fie#er & el Report Document% así

    como la orma en la ,ue interactan.2a principal inalidad de los controles Fie#er es ver inormes en la aplicaci)n ,ue utilia el usuario.2os controles Fie#er pueden pasarse como ruta a un arc(ivo de inorme o a un o!"etoReportDocument. Adem/s de mostrar inormes% estos controles s)lo e"ercen un control limitado so!reel inorme. Pueden esta!lecer inormaci)n de cone:i)n & par/metros. Asimismo% sus posi!ilidadesde e:portaci)n son limitadas.

    El o!"eto ReportDocument e"erce ma&or control so!re los inormes. Tiene muc(as propiedades &muc(os m7todos ,ue permiten ,ue el usuario controle la apariencia del inorme mediante c)di$o. Este

  • 8/18/2019 Ld9 Reporte Datos

    27/72

    10. CREANDO REPORTES DE DATOS - 8L -

    o!"eto se puede utiliar tanto en una aplicaci)n de indo#s como en una aplicaci)n e! no o!stante%no puede ver los inormes. En este punto es donde interactan los controles Fie#er & el o!"etoReportDocument. Puede utiliar este o!"eto para realiar modiicaciones &% a continuaci)n% pasarlo alos controles Fie#er para verlo.

    +.+.1. Objeto ReportDoc$ment

    El nivel superior del modelo de o!"etos de Cr&stal Reports es el o!"eto ReportDocument. Este o!"etocontiene todas las propiedades & todos los m7todos necesarios para interactuar con un inorme & personaliarlo. Puede utiliar su m7todo 2oad para a!rir un arc(ivo de inorme o asi$narle un inormecon tipos declarados.

    Para utiliar ReportDocument% en primer lu$ar de!e (acer reerencia al espacio de nom!resCr&stalDecisions.Cr&stalReports.En$ine% ,ue se encuentra en el arc(ivoCr&stalDecisions.Cr&stalReports.En$ine.dll. Si (a insertado un inorme en la aplicaci)n% estareerencia se a$re$ar/ autom/ticament

    % Propiedades

    ReportDocument contiene muc(as propiedades ,ue permiten al usuario personaliar & controlar la

    apariencia & el comportamiento del inorme. A continuaci)n descri!imos los o!"etos & lascolecciones principales de ReportDocument3

    • Data!ase3

    El o!"eto Dat/!ase proporciona acceso a la inormaci)n de la !ase de datos contenida en elinorme. El o!"eto Dat/!ase contiene una colecci)n Ta!les. Esta colecci)n contiene muc(oso!"etos Ta!le% ,ue componen todas las ta!las utiliadas en el inorme. El o!"eto Ta!le le permite o!tener o esta!lecer la inormaci)n de cone:i)n mediante el o!"eto Connectionlno.Adem/s% proporciona inormaci)n so!re todos los campos ,ue est/n disponi!les en la ta!la atrav7s de la colecci)n Data!ase*ieldDeinitions.

    ; DataDeinition3

    El o!"eto DataDeínition proporciona acceso a los si$uientes campos3 campos de par/metros%campos de ordenaci)n% campos de nom!re de $rupo% campos de resumen% campos de totalesacumulados & campos de enunciados S92. Este o!"eto tam!i7n proporciona acceso a los $rupos,ue se utilian en el inorme.

    • E:portOptions3

    El o!"eto E:portOptions proporciona las propiedades para recuperar & esta!lecer las opcionesde e:portaci)n del inorme. E:portOptions se utilia para esta!lecer las opciones de destinodisco% correo electr)nico e intercam!io & el tipo de e:portaci)n E:cel% PD*% ord & =T'2.

    ; PrintOptions3

    El o!"eto PrintOptions proporciona las propiedades & los m7todos para esta!lecer las opcionesde impresi)n de un inorme. Al$unas de las propiedades ,ue puede esta!lecer son el nom!re dela impresora% el tamao & la orientaci)n del papel% así como los m/r$enes de p/$ina.

    ;

  • 8/18/2019 Ld9 Reporte Datos

    28/72

    10. CREANDO REPORTES DE DATOS - 8M -

    9ig$ra 10.11 'odelo de O!"etos de ReportDocument

  • 8/18/2019 Ld9 Reporte Datos

    29/72

    10. CREANDO REPORTES DE DATOS - 8 -

    • ReportDeinition3

    El o!"eto ReportDeinition permite recuperar todas las clases Ureas% ReportO!"ects & Section de uninorme. Esto le permite o!tener & esta!lecer las opciones de ormato de estos elementos para ,ue pueda personaliarse la apariencia del inorme.

    ; ReportOptions3

    El o!"eto ReportOptions le permite o!tener & esta!lecer los datos relacionados con lasopciones del inorme Ena!leSaveDatait(Report% Ena!leSavePrevie#Picture%Ena!leSaveSummariesit(Report & Ena!le?seDumm&Data de un inorme.

    • Summar&lno

    El o!"eto Summari 4no le permite o!tener & deinir la inormaci)n de resumen del inorme. 4nclu&eeord3iReport% ReportAut(or% ReportComments% ReportSu!"ect& ReportTitle.

    +.+.+. ?indows 9orms =iewer

    Si pro$rama una aplicaci)n indo#s% puede almacenar un inorme en indo#s *orms con Cr&stalReports indo#s *orms Fie#er% ,ue est/ disponi!le como control en el cuadro de (erramientas de

    Fisual Stiudio @Crsta"Report=iew.Adem/s de proporcionar la comodidad de ver inormes en una aplicaci)n de indo#s% indo#s *ormsFie#er puede interactuar con otros controles de la misma aplicaci)n & actualiar de orma din/mica elinorme ,ue contiene

    9ig$ra 10.1+3 'odelo de O!"etos de indo# *orms Fie#er 

  • 8/18/2019 Ld9 Reporte Datos

    30/72

    10. CREANDO REPORTES DE DATOS - >0 -

    % Propiedades

    indo#s *orms Fie#er contiene propiedades ,ue le permiten al usuario personaliar & controlar laapariencia & el comportamiento del inorme. A continuaci)n descri!imos los o!"etos & las colecciones principales de indo#s *orms Fie#er3

    ; Ta!le2o$On4nos3

    Ta!le2o$On4nos proporcionar/ acceso a la colecci)n Ta!le2o$Onlno. El o!"etoTa!le2o$Onlno proporciona propiedades para recuperar & esta!lecer las opciones deconectividad de la ta!la como3 nom!re de servidor% nom!re de usuario% nom!re de la !ase dedatos & contrasea.

    ; Parameter*ields3

    El o!"eto Parameter*ields proporciona acceso a la colecci)n Parameter*ield. Este o!"eto le permite o!tener & esta!lecer la inormaci)n de los par/metros del inorme. Por e"emplo% puedeesta!lecer propiedades para recuperar & esta!lecer las opciones & los valores de un campo de par/metro. Por e"emplo3 los valores actuales% los valores predeterminados & el te:to deconirmaci)n.

    ; ReportSource32a propiedad ReportSource se utilia para esta!lecer el ori$en del inorme. Puede ser un o!"etoReportDocument o una cadena ,ue conten$a la u!icaci)n del arc(ivo del inorme.

    +./. Creando Reportes con Crsta" Reports

    En esta secci)n veremos como crear reportes usando el Cr&stal Report Desi$ner & comovisualiarlos en una aplicaci)n indo#s usando el Cr&stalReportFie#er.

    +./.1. DiseBando e" In5orme con Crsta" Report Designer

    Cr&stal Report Desi$ner permite disear & modiicar reportes dentro del Entorno de Pro$ramaci)n4nte$rado 4DE de Fisual Studio .NET.

    Esta (erramienta puede pro$ramarse directamente desde Fisual Studio .NET. No es necesariodistri!uir Report Desi$ner con el inorme.

    Para crear un reporte usando el Cr&stal Report Desi$ner de!emos realiar los si$uientes pasos3

    1.  Crear un DataSet con Tipo T&ped DataSet ,ue sirva de ori$en de datos para disear el reporte.

     Nota: Para aprender a crear un ata/et con tipo consulte la sección del ap2tulo 3.

    +. Del men Pro"ect% seleccionar Add Ne# ítem... o pulsar las teclas VCtrlW VS(itW VAW.

    /. Del di/lo$o de Aadir Nuevo Elemento seleccionar Cr&stal Report.

    2. Escri!ir el nom!re del reporte & clic en el !ot)n Open.

    3. Aparecer/ un di/lo$o de Re$istro del Sot#are% clic en el !ot)n Re$ister 2ater para indicar,ue despu7s se re$istrar/.

    4. Se mostrar/ la ventana de di/lo$o de

  • 8/18/2019 Ld9 Reporte Datos

    31/72

    10. CREANDO REPORTES DE DATOS - >1 -

    9ig$ra 10.1/ =entana de -a"er)a de Reportes de Crsta" Report.

    6. En la secci)n Cr7ate a Ne# Cr&stai Report Document seleccionar la primera opci)n ?sin$t(e Report E:pert para indicar ,ue el reporte se $enerar/ con el asistente de reportes.

    7. En la secci)n C(oose an E:pert seleccionar Standard para indicar ,ue se desea crear un reporteest/ndar (o"a AB.

    8. Clic en el !ot)n O & aparecer/ la ic(a Data de la ventana del Report E:pert% similar a lai$ura 10.1B.

  • 8/18/2019 Ld9 Reporte Datos

    32/72

    10. CREANDO REPORTES DE DATOS - >8 -

    9ig$ra 10.12 *ic(a Data de la Fentana del Report E:pert

    10. E:pandir el icono de Pro"ect Data% ADO .NET DataSets & lue$o el DataSet creado.

    11. Seleccionar la ta!la ,ue se desea usar en el reporte & clic en el !ot)n 4nsert Ta!le.

     Nota: Pueden usarse m"s de una ta&la en el caso de crear reportes agrupados.

    1+. Clic en el !ot)n Ne:t & se mostrar/ la ic(a *ields del Report E:pert% similar a la de lai$ura 10.1H.

  • 8/18/2019 Ld9 Reporte Datos

    33/72

    10. CREANDO REPORTES DE DATOS - >> -

    9ig$ra 10.133 *ic(a *ields de la Fentana del Report E:pertK

    1/.  Seleccionar los campos ,ue se mostrar/n en el reporte & clic en el !ot)n Add% si se desean pasatodos clic en Add AllQ

     Nota- espués de pasar los campos se pueden seleccionar y cam&iar el t2tulo de lasca&eceras en la opción 4olumn 5eading4.

    12. Clic en el !ot)n Ne:t & se mostrar/ la ic(a

  • 8/18/2019 Ld9 Reporte Datos

    34/72

    10. CREANDO REPORTES DE DATOS - >B -

    9ig$ra 10.143 *ic(a

  • 8/18/2019 Ld9 Reporte Datos

    35/72

    10. CREANDO REPORTES DE DATOS - >H -

    9ig$ra 10.163 *ic(a KTotal de la Fentana del Report E:pert.

    16. Seleccionar los campos ,ue se mostrar/n como c/lculos en el pie de los detalles% lue$oseleccionar cada uno & ele$ir la unci)n ,ue se ,uiere mostrar contar% suma% promedio%

    m/:imo% mínimo% etc.17. Clic al !ot)n Ne:t & si eli$i) A$rupar por al$n campo se ver/ la ic(a Top N del

    Report E:pert% similar a la de la i$ura 10.1M

  • 8/18/2019 Ld9 Reporte Datos

    36/72

    10. CREANDO REPORTES DE DATOS - >G -

    9ig$ra 10.173 *ic(a Top N de la Fentana del Report E:pert

    18. Si desea puede sspeciicar ordenar los datos a$rupados !asados en un total o c/lculocreado.

    +0. Clic al !ot)n Ne:t & se ver/ la ic(a C(art del Report E:pert% similar a la de lai$ura 10.1.

  • 8/18/2019 Ld9 Reporte Datos

    37/72

    10. CREANDO REPORTES DE DATOS - >L -

    9ig$ra 10.183 *ic(a C(art de la Fentana del Report E:pert

    +1. Si desea puede crear un $r/ico de datos% seleccionando el tipo de $r/ico% los datos a $raicar &los títulos del $r/ico.

    ++. Clic al !ot)n Ne:t & se ver/ la ic(a Select del Report E:pert% similar a la de la i$ura 10.80

  • 8/18/2019 Ld9 Reporte Datos

    38/72

    10. CREANDO REPORTES DE DATOS - >M -

    9ig$ra 10.+03 *ic(a Select de la Fentana del Report E:pert

    +/. Si desea puede seleccionar un campo por el cual se desea iltrar los datos% escri!iendo lacondici)n del iltro.

    +2. Clic al !ot)n Ne:t & se ver/ la ic(a St&le del Report E:pcrt% similar a la de la i$ura 10.81

  • 8/18/2019 Ld9 Reporte Datos

    39/72

    10. CREANDO REPORTES DE DATOS - > -

    9ig$ra 10.+13 *ic(a St&le de la Fentana del Report E:pert.

    +3. Escri!ir el título ,ue ir/ en el inorme & seleccionar el estilo de inorme deseado & clic enel !ot)n *inis( para crear el reporte

    +4. 4nmediatamente se presentar/ so!re el diseador de reportes el reporte creado% similar ala i$ura 10.88

    9ig$ra 10.++ Fista del reporte en el Cr&stal Report Desi$ner.

  • 8/18/2019 Ld9 Reporte Datos

    40/72

    10. CREANDO REPORTES DE DATOS - B0 -

    +6. Para modiicar el reporte puede usar los controles de la ic(a Cr&stal Reports delTool6o:% similar a la vista en la i$ura 10.8>

    9ig$ra 10.+/3 *ic(a Cr&stal Reports del Tool6o:

     Nota: 6os controles del cuadro de 7erramientas sólo permiten insertar cuadros de te+to l2neas y

    recuadros. /i desea insertar otro tipo de o&'etos use las &arras de 7erramientas ue a

    continuación e+plicamos.

    Tam!i7n puede usar las !arras de (erramientas del Cr&stal Report% similar a las mostradas en lasi$uras 10.8B & 10.8H3

    9ig$ra 10.+2 :arra de erramienta Principa" de Crsta" Reports.

     Nota- para o&tener &arra de 7erramientas use el men$ ver &arra de 7erramientas y luego ristal 8eport 

     Principal 

     Nota- 6a &arra de 7erramientas principal permite modificar las caracter2sticas de los controles

    dise!ados en el reporte tal como la fuente tama!o alineación. 9dem"s permite cam&iar 

    caracter2sticas del reporte insertando campos ordenando et 

    9ig$ra 10.+3 6arra de (erramienta 4nsertar de Cr&stal Reports.

     Nota- 6a &arra de 7erramientas insertar permite agregar totales al reporte insertar grupos

    adicionar su&reportes adicionar un gr"fico de datos o insertar una imagen.

    +8. *inalmente despu7s de realiar cam!ios al reporte% proceda a $ra!arlo.

     :ota- 6os reportes creados en el rystal 8eports tienen la e+tensión rpt.

    +./.+. Presentando e" In5orme en ?indows 9orms =iewer

    ?na ve creado el reporte con el diseador de reportes es necesario presentarlo en una aplicaci)n deindo#s *orms% para lo cual se usa el visor de reportes para ormularios indo#s% en in$l7sindo#s *orms Fie#er.

    =a& ,ue mencionar ,ue un mismo reporte arc(ivo rpt puede ser usado en indo#s o en e!% lonico ,ue cam!ia es el visor% para el caso de una aplicaci)n e! con ASP .NET ser/ el e! *ormsFie#er.

    En este caso veremos s)lo el visor de las aplicaciones indo#s% el cual se encuentra en el

  • 8/18/2019 Ld9 Reporte Datos

    41/72

    10. CREANDO REPORTES DE DATOS - B1 -

    Tool6o: como control Cr&stalReportFie#er.

    El visor de reportes proporciona los si$uientes componentes% ,ue le a&udan a ver un inorme Cr&stal3

    1. :arra de erramientas

    El visor de reportes tiene empa,uetado una !arra de (erramientas similar a la mostrada en la i$ura10.8G3

    9ig$ra 10.+4 6arra de (erramientas del Cr&stal Reports Fie#er.

    2a !arra de (erramientas del visor contiene los si$uientes iconos3

    • 4r a primera p/$ina.

    • Retroceder p/$ina.

    • 4r a una p/$ina especiicada.

    • Avanar p/$ina.

    • 4r a la ltima p/$ina.

    • Cerrar ventana activa s)lo para $rupo o su!inorme.

    • 4mprimir inorme.

    • Actualiar inorme.

    • E:portar un inorme.

    • 'ostrarXocultar eI /r!ol de $rupos.

    • AumentarXreducir inorme.

    • 6uscar 

    Puede personaliar m/s la !arra de (erramientas pro$ramando con la descripci)n de clase deindo#s *orms Fie#er. Por e"emplo% para ocultar el icono 6uscar% esta!leca la propiedadS(o#Te:tSearc(6utton en *alse.

    Como alternativa a la utiliaci)n de la !arra de (erramientas predeterminada% puede ocultar la !arrade (erramientas completa esta!leciendo la propiedad Displa&Tool!ar en *alse. A continuaci)n% puedeimplementar su propia !arra de (erramientas con otros controles indo#s *orm por e"emplo3 el control6utton & pro$ramar las unciones ,ue necesite utiliando los m7todos% las propiedades & los eventosde indo#s *orms Fie#er.

    +. rbo" de -r$pos

    El visor de reportes tam!i7n contiene un /r!ol de $rupos u!icado en el lado derec(o% 7ste s)loaparece si se dan estas dos condiciones3

    • El inorme Cr&stal tiene un /r!ol de $rupos.

    • =a mostrado u ocultado el icono 'ostrar /r!ol de $rupos de la !arra de (erramientas del visor.

     Nota: Puede e+pandir y contraer el "r&ol de grupos si 7ace clic en el s2m&olo ; ue aparece 'unto acada nodo del mismo.

  • 8/18/2019 Ld9 Reporte Datos

    42/72

    10. CREANDO REPORTES DE DATOS - B8 -

    % Demo 48

    Esta demostraci)n tiene por o!"etivo ensear a crear un simple reporte de datos usando el Cr&stalReport E:port% el Report Desi$ner & el Cr&stalReportFie#er.

    El e"emplo tra!a"a con un ormulario ,ue muestra en un control visor de reportes inormaci)n de los

    Clientes de la 6D Nort(#ind de S92 Server. En el reporte se muestran el c)di$o% nom!re & direcci)nde los clientes.

    Para ver la demostraci)n de!emos realiar los si$uientes pasos3

    1. Crear una Aplicaci)n indo#s en Fisual 6asic .NET llamada Demo48.

    +. En la ventana del e:plorador de soluciones seleccionar el arc(ivo *orm 1 & en la ventana de propiedades cam!iar la propiedad *ileName a 5rmReporteC"iente.

    /. En el diseador de ormularios indo#s% arrastrar un control Cr&stalReportFie#er% lue$oconi$urar las propiedades% tal como se muestra en el si$uiente cuadro3

    Objeto Propiedad =a"or

    *orm1 Name

    StartPosition

    Te:t

    indo#sState

    rmReporteCliente

    CenterScreen

    Reporte de Clientes

    'a:imiad

    Crs&talReportFie#er Name

    Displa&

  • 8/18/2019 Ld9 Reporte Datos

    43/72

    10. CREANDO REPORTES DE DATOS - B> -

    1/. Del men Pro"ect% seleccionar Add Ne# ítem o pulsar las teclas VCtrlW VS(ilW VAW.

    12. Del di/lo$o de Aadir Nuevo Elemento seleccionar Cr&stal Report.

    13. Escri!ir en el nom!re del reporte ReporteC"ientes & clic en el !ot)n Open.

    14. Aparecer/ un di/lo$o de Re$istro del Sot#are% clic en el !ot)n Re$ister 2ater para indicar ,ue despu7s se re$istrar/.

    16. Se mostrar/ la ventana de di/lo$o de .

    17. En la secci)n Cr7ate a Ne# Cr&stal Report Document seleccionar la primera opci)n ?sin$ t(eReport E:pert para indicar ,ue el reporte se $enerar/ con el asistente de reportes.

    18. En la secci)n C(oose an E:pert seleccionar Standard para indicar ,ue se desea crear un reporteest/ndar (o"a AB.

    +0. Clic en el !ot)n O & aparecer/ la ic(a Data de la ventana del Report E:pert i$ura 10.1B.

    +1. E:pandir el icono de Pro"ect Data% ADO .NET DataSets & lue$o el DataSet dst.

    ++. Seleccionar la ta!la Customers & clic en el !ot)n 4nsert Ta!le.

    +/. Clic en el !ot)n Ne:t & se mostrar/ la ic(a *ields del Report E:pert i$ura 10.1H.+2. Clic en el !ot)n Add All para mostrar todos los campos en el reporte.

    +3. Despu7s de pasar los campos% modiicar los títulos de las ca!eceras% para el primer campo C)di$o% para el se$undo Nom!re & para el tercero Direcci)n.

    +4. Clic en el !ot)n Ne:t & se mostrar/ la ic(a

  • 8/18/2019 Ld9 Reporte Datos

    44/72

    10. CREANDO REPORTES DE DATOS - BB -

     El o&'eto de reporte tiene un método SetDataSource donde 7ay ue pasar como par"metro el origen del 

    reporte es decir el ata/et (Dstl).

     Para ue se pueda visuali#ar el reporte en el visor de reportes de eporteCliente  /nherits Sstem.Windows.,orms.,orm  Private Su# ostrar>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  dap.,ill(Dst;% 8Customers8)  Dim rpt As New >eporte&Clientes()  rpt.SetDataSource(Dst;)

      crv.>eportSource 2 rpt  End Su#End Class

    % Demo 60

    Esta demostraci)n tiene por o!"etivo ensear a crear un reporte de datos con ,uie!res oa$rupamientos & su!totales o c/lculos% usando para ello el Cr&stal Report E:port% el Report Desi$ner & el

  • 8/18/2019 Ld9 Reporte Datos

    45/72

    10. CREANDO REPORTES DE DATOS - BH -

    Cr&stalReportFie#er.

    El e"emplo tra!a"a con un ormulario ,ue muestra en un control visor de reportes inormaci)n de lasOrdenes & sus Detalles de la 6D Nort(#ind de S92 Server.

    En el reporte se muestran en la ca!ecera los datos de la orden% como c)di$o de orden% ec(a de la orden%nom!re del cliente & apellido del empleado mientras ,ue en el detalle se aprecia el nom!re del producto% precio unitario% cantidad & precio total. Tam!i7n se muestran como su!totales el Total deítems & el Falor Total de todos los detalles de la Orden.

    Para ver la demostraci)n de!emos realiar los si$uientes pasos3

    1. Crear una Aplicaci)n indo#s en Fisual 6asic .NET llamada Demo60.

    +. En la ventana del e:plorador de soluciones seleccionar el arc(ivo *orm 1 & en la ventana de propiedades cam!iar la propiedad *ileName a 5rmReporteDeta""esOrden.

    /. En el diseador de ormularios indo#s% arrastrar un control Cr&stalReportFie#er% lue$oconi$urar las propiedades% tal como se muestra en el si$uiente cuadro3

    Objeto Propiedad =a"or

    *orm1 NameStartPosition

    Te:t

    indo#sState

    *rmReporteDetallesOrdenCenterScreen

    Reporte de Detalles de Ordenes

    'a:imiad

    Crs&talReportFie#er Name

    Displa&

  • 8/18/2019 Ld9 Reporte Datos

    46/72

    10. CREANDO REPORTES DE DATOS - BG -

    o!"etos S,lConnection1 & S,lDataAdapter1.

    13. En el diseador de componentes seleccionar el o!"eto S,lConnection 1 & cam!iarle de nom!re acon. Tam!i7n seleccionar el o!"eto S,lDataAdapterl & cam!iarle de nom!re a dap".

    14. Repetir los pasos del B al 1B para crear otro S,lDataAdapter ,ue permita mostrar de la ta!la Order Details los campos3 OrderID% !nitPrice% G$antit & el campo calculado Total ?nitPrice :9uantit&% adem/s de la ta!la Products el campo ProductName.

    16. En el diseador de componentes seleccionar el o!"eto S,lDataAdapter8 creado & cam!iarle denom!re a dap+.

    17. Clic derec(o al o!"eto dap1 & del men conte:tual seleccionar

  • 8/18/2019 Ld9 Reporte Datos

    47/72

    10. CREANDO REPORTES DE DATOS - BL -

    9ig$ra 10.+7 *ic(a 2in+ de la Fentana del Report E:pert.

    //. Clic en el !ot)n Ne:t & se mostrar/ la ic(a *ields del Report E:pert i$ura 10.1H.

    /2. Seleccionar & pasar los campos ,ue se ver/n en la secci)n de detalles del reporte ,ue son3

    Prod$ctNamc* !nitPrice* G$antit Tota"./3. Clic en el !ot)n Ne:t & se mostrar/ la ic(a

  • 8/18/2019 Ld9 Reporte Datos

    48/72

    10. CREANDO REPORTES DE DATOS - BM -

    deseamos (acer al$n cam!io.

    24. Re$resar al ormulario & en la ventana e:plorador de soluciones dar clic en el !ot)n Fie# Code.

    26. Crear el procedimiento de evento &ostrarReporte% ,ue mane"e el evento 2oad del ormulario &escri!ir el si$uiente c)di$o3Private Su# ostrar>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad

      dap;.,ill(Dst;% 8"rders8)  dap7.,ill(Dst;% 8"rder Details8)  Dim rpt As New >eporte&Detalles"rdenes()  rpt.SetDataSource(Dst;)  crv.>eportSource 2 rpt  End Su#

    27. Coni$urar rmReporteDetallesOrden como el ormulario de inicio.

    28. eporteDetalles"rden  /nherits Sstem.Windows.,orms.,orm

  • 8/18/2019 Ld9 Reporte Datos

    49/72

    10. CREANDO REPORTES DE DATOS - B -

      Private Su# ostrar>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  dap;.,ill(Dst;% 8"rders8)  dap7.,ill(Dst;% 8"rder Details8)  Dim rpt As New >eporte&Detalles"rdenes()  rpt.SetDataSource(Dst;)  crv.>eportSource 2 rpt  End Su#

    End Class

    % Demo 61

    Esta demostraci)n tiene por o!"etivo ensear a crear un reporte de datos ,ue use procedimientosalmacenados% tanto sin par/metros como con par/metros% usando para los reportes el Cr&stal ReportE:port% el Report Desi$ner& el Cr&stalReportFie#er.

    El e"emplo tra!a"a con dos ormularios% uno creado en tiempo de diseo ,ue muestra lasCate$orías de productos en un Com!o6o:% las cuales se o!tienen e"ecutando un procedimientoalmacenado sin par/metros.

    Al seleccionar una cate$oría se crea un ormulario en tiempo de e"ecuci)n donde se muestra en unvisor el reporte de Productos de dic(a cate$oría% el cual se o!tiene e"ecutando un procedimientoalmacenado con un par/metro.

    Para ver la demostraci)n de!emos realiar los si$uientes pasos3

    1. En el Fisual Studio .NET% del men Fie# seleccionar Server E:plorer.

    +. E:pandir el servidor & lue$o la !ase de datos Nort(#ind.

    /. En el icono de Stored Procedures dar clic derec(o & seleccionar Ne# Stored Procedure.

    2. Crear un procedimiento ,ue permita 2istar las Cate$orías3C>EA*E P>"CEDG>E up&Categoria&4istar

    AsSelect Categor/D%CategorName ,rom Categories

    3. Crear un procedimiento ,ue permita 2istar los Productos de una Cate$oría3A4*E> P>"CEDG>E up&Producto&4istarPorCategoriaHCategor/D intAsSelect Product/D%ProductName%GnitPrice%Categor/D ,rom Products Where Categor/D2HCategor/D

    4. Crear una Aplicaci)n indo#s en Fisual 6asic .NET llamada Demo61.

    3. En la ventana del e:plorador de soluciones seleccionar el arc(ivo *orml & en la ventana de propiedades cam!iar la propiedad *ileName a 5rmReporteProd$ctosCategoria.

    4. En el diseador de ormularios indo#s% arrastrar un control Com!o6o: & un 6utton% lue$oconi$urar las propiedades% tal como se muestra en el si$uiente cuadro3

    Objeto Propiedad =a"or

    *orm1 Name

    'a:imie6o:

    rmReporteProductosCate$oria

    *alse

  • 8/18/2019 Ld9 Reporte Datos

    50/72

    10. CREANDO REPORTES DE DATOS - H0 -

    'inimie6o:

    Sie

    Star Position

    Te:t

    *alse

    idt(]>00 %=ei$(t]1M0

    CenterScreen

    Selecciona Cate$oría del Producto

    Com!o6o:1 NameDropDo#nSt&le

    2ocation

    Sie

    c!oCate$oriaDropDo#n2ist

    Z]1G%Y]8B

    idt(]8G0%=ei$(t]81

    6utton1 Name

    Cursor 

    2ocation

    Sie

    Te:t

    6tnReporte

    =and

    Z]GG%Y]MB

    idt(]1G0%=ei$(t]81

    Fer Reporte de Productos

    8. Del Tool6o: seleccionar la ic(a Data & arrastrar el control S,lDataAdapter.

    10. 4nmediatamente se mostrar/ el ^ataAdapter iard% clic al !ot)n Ne:t.

    11. Seleccionar la cone:i)n a la !ase de datos Nort(#ind & clic en Ne:t.

    1+. En el tipo de consulta ele$ir la tercera ?sar procedimiento almacenado e:istente & clic

    en Ne:t.

    1/. En el di/lo$o de Enlace a procedimientos almacenados de a lista del Select ele$ir $pCategor)aFistar.

    12. Clic al !ot)n Ne:t e inmediatamente se presentar/ la ventana con el Resultado de la creaci)n.

    13. Clic en el !ot)n *inis( & se crear/n los o!"etos S,lConnectionl & S,lDataAdapterl.

    14. En el diseador de componentes seleccionar el o!"eto S,lConnectionl & cam!iarle de nom!re acon. Tam!i7n seleccionar el o!"eto S,lDataAdapter 1 & cam!iarle de nom!re adap".

    16. Repetir los pasos del al 1= para crear otro S,lDataAdapter ,ue permita e"ecutar el procedimiento$pProd$ctoFistarPorCategoria.

    17. En el diseador de componentes seleccionar el o!"eto S,lDataAdapter8 creado & cam!iarle denom!re a dap+.

    18. Clic derec(o al o!"eto dap1 & del men conte:tual seleccionar

  • 8/18/2019 Ld9 Reporte Datos

    51/72

    10. CREANDO REPORTES DE DATOS - H1 -

    +2. Del di/lo$o de Aadir Nuevo Elemento seleccionar Cr&stal Report.

    +3. Escri!ir en el nom!re del reporte ReporteProd$ctosPorCategoria & clic en el !ot)n Open.

    +4. Aparecer/ un di/lo$o de Re$istro del Sot#are% clic en el !ot)n Re$ister 2ater para indicar,ue despu7s se re$istrar/.

    +6. Se mostrar/ la ventana de di/lo$o de .

    +7. En la secci)n Cr7ate a Ne# Cr&stal Report Document seleccionar la primera opci)n ?sin$ t(eReport E:pert para indicar ,ue el reporte se $enerar/ con el asistente de reportes.

    +8. En la secci)n C(oose an E:pert seleccionar Standard para indicar ,ue se desea crear un reporteest/ndar (o"a AB.

    /0. Clic en el !ot)n O & aparecer/ la ic(a Data de la ventana del Report E:pert i$ura10.1B.

    /1. E:pandir el icono de Pro"ect Data% ADO .NET DataSets & lue$o el DataSet dst.

    /+. Seleccionar las dos ta!las del DataSet & clic en el !ot)n 4nsert Ta!le.

    //. Como son 8 ta!las relacionadas se mostrar/ la ic(a 2in+ i$ura 10.8M.

    /2. Clic en el !ot)n Ne:t & se mostrar/ la ic(a *ields del Report E:pert i$ura 10.1H.

    /3. Seleccionar & pasar los campos ,ue se ver/n en la secci)n de detalles del reporte ,ue son3Catcgor"D* Prod$ctID* Prod$ctName !nitPrice.

    /4. Clic en el !ot)n Ne:t & se mostrar/ la ic(a

  • 8/18/2019 Ld9 Reporte Datos

    52/72

    10. CREANDO REPORTES DE DATOS - H8 -

    Private Su# ostrar>eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tn>eporte.Clic5  dap7.SelectCommand.Parameters(8HCategor/D8).!alue 2c#oCategoria.Selected!alue  /3 Not Dst;.*a#les(;) /s Nothing *hen Dst;.*a#les(;).Clear()  dap7.,ill(Dst;% 8up&Producto&4istarPorCategoria8)  Dim rpt As New >eporte&ProductosPorCategoria()  rpt.SetDataSource(Dst;)

      Dim crv As New Crstal>eport!iewer()  crv.>eportSource 2 rpt  crv.Doc5 2 Doc5Stle.,ill  Dim 3rm>eporte As New ,orm()  With 3rm>eporte  .Controls.Add(crv)  .*e+t 2 8>eporte de Productos + Categoria8  .WindowState 2 ,ormWindowState.a+imi9ed  .ShowDialog()  End With  End Su#

    23. Coni$urar rmReporteProductosCate$oria como el ormulario de inicio.

    24.

  • 8/18/2019 Ld9 Reporte Datos

    53/72

    10. CREANDO REPORTES DE DATOS - H> -

    9ig$ra 10./13 Fentana del ormulario rmReporte del DemoL1.

    27. *inalmente% cierne la ventana para salir de la aplicaci)nNOTA para ,ue uncione 4mports Cr&stalDecisions.indo#s.*orms use la reerenciaCr&stalDecision.indo#s.*orms

  • 8/18/2019 Ld9 Reporte Datos

    54/72

    10. CREANDO REPORTES DE DATOS - HB -

    Codigo de 5rmReporte de" Demo61/mports Sstem.Data.S:lClient/mports CrstalDecisions.Windows.,ormsPu#lic Class 3rm>eporteProductosCategoria  /nherits Sstem.Windows.,orms.,orm  Private Su# CargarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  dap;.SelectCommand.Command*pe 2 Command*pe.StoredProcedure  dap;.,ill(Dst;% 8up&Categoria&4istar8)

      With c#oCategoria  .DataSource 2 Dst;.*a#les(eporte(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tn>eporte.Clic5  dap7.SelectCommand.Parameters(8HCategor/D8).!alue 2c#oCategoria.Selected!alue  /3 Not Dst;.*a#les(;) /s Nothing *hen Dst;.*a#les(;).Clear()  dap7.,ill(Dst;% 8up&Producto&4istarPorCategoria8)

      Dim rpt As New >eporte&ProductosPorCategoria()  rpt.SetDataSource(Dst;)  Dim crv As New Crstal>eport!iewer()  crv.>eportSource 2 rpt  crv.Doc5 2 Doc5Stle.,ill  Dim 3rm>eporte As New ,orm()  With 3rm>eporte  .Controls.Add(crv)  .*e+t 2 8>eporte de Productos + Categoria8  .WindowState 2 ,ormWindowState.a+imi9ed  .ShowDialog()

  • 8/18/2019 Ld9 Reporte Datos

    55/72

    10. CREANDO REPORTES DE DATOS - HH -

      End With  End Su#End Class

    /. Trabajando con In5ormes $sando &S O55iceEn esta ltima parte veremos como crear inormes usando 'S ord & 'S E:cel ,ue son parte de 'SOice. Primero veremos como crear documentos con datos de una aplicaci)n & lue$o aprenderemos

    como crear (o"as de c/lculo & $r/icos con datos de la aplicaci)n.

    >.1. !sando &S ?ord para Crear Doc$mentos

    2a ma&or parte de usuarios de computadoras conocen el uso de 'S ord & so!re 7sta !ase podemostra!a"ar con documentos ,ue almacenen los datos de nuestras aplicaciones% para lo cual de!emosentender el modelo de o!"etos ,ue nos !rinda dic(o pro$rama.

    /.1.1. Entendiendo e" &ode"o de Objetos de &S ?ord

    2os o!"etos de 'icrosot ord est/n or$aniados en orden "er/r,uico% siendo Application & Documentlas dos clases principales de la cima de la "erar,uía. 2a $ran importancia de estas dos clases se de!e a,ue la ma&or parte del tiempo tra!a"ar/ con la propia aplicaci)n ord o (aciendo al$n tipo de

    manipulaci)n en documentos de ord.El modelo de o!"etos de ord est/ estrec(amente relacionado con la intera de usuario. El o!"etoApplication proporciona un contenedor para la aplicaci)n completa% cada o!"eto Document representaa un nico documento de ord% el o!"eto Para$rap( corresponde a un s)lo p/rrao% etc. Todos & cadauno de estos o!"etos poseen numerosos m7todos & propiedades ,ue permiten su manipulaci)n & lainteracci)n mutua.

    A primera vista% parece (a!er un alto $rado de superposici)n en el modelo de o!"etos de ord. Por e"emplo3 los o!"etos Document & Selection son miem!ros del o!"ete Application% pero el o!"etoDocument tam!i7n es miem!ro del o!"eto Selection. Tanto Document como Selection contieneno!"etos 6oo+mar+& Ran$e.

    A continuaci)n presentamos el modelo de o!"etos de 'S ord3

    9ig$ra 10./+3 Resumen del 'odelo de O!"etos de 'S ord.

    El o!"eto Application contiene los o!"etos Document% Selection% 6oo+mar+ & Ran$e.

  • 8/18/2019 Ld9 Reporte Datos

    56/72

    10. CREANDO REPORTES DE DATOS - HG -

    En la si$uiente secci)n e:plicamos !revemente los o!"etos de nivel superior & c)mo interactan entresí.

    • App"ication

    El o!"eto Application representa la aplicaci)n ord & es el principal de todos los o!"etos. Susmiem!ros normalmente son aplica!les a ord en su totalidad. Se pueden utiliar sus

     propiedades & m7todos para controlar el entorno de ord.• Doc$ment

    El o!"eto Document es de vital importancia para la pro$ramaci)n en ord. Cuando se a!re undocumento o se crea un documento nuevo% se est/ creando un o!"eto Document nuevo% ,ue sea$re$a a la colecci)n Documents de ord. El documento ,ue tiene el oco se llama documentoactivo & se representa mediante la propiedad ActiveDocument del o!"eto Application%

    • Se"ection

    E" o!"eto Selectior representa el /rea ,ue est/ seleccionada. Cuando se realia una operaci)n en laintera de usuario de ord% como poner te:to en ne$rita% se selecciona o resalta el te:to &% acontinuaci)n% se aplica el ormato. El o!"eto Selection siempre est/ presente en un documento.Adem/s% tam!i7n puede representar varios !lo,ues de te:to no conti$uos.

    • Range

    El o!"eto Ran$e representa un /rea conti$ua de un documento% & se deine mediante una posici)n de car/cter inicial & una posici)n de car/cter inal. Pueden utiliarse varios o!"etos Ran$ea la ve. El mismo documento puede tener deinidos varios o!"etos Ran$e. ?n o!"eto

    Ran$e tiene las si$uientes características3

    - Puede ser e1 punto de inserci)n solamente% un ran$o de te:to o el documentocompleto.

    - 4nclu&e caracteres no imprimi!les como espacios% caracteres de ta!ulaci)n & marcas de p/rrao.

    - Puede ser el /rea representada por la selecci)n actual% o puede representar otra /readierente de la de la selecci)n actual.

    - No se $uarda con un documento & s)lo e:iste mientras se e"ecuta el c)di$o.

    -

  • 8/18/2019 Ld9 Reporte Datos

    57/72

    10. CREANDO REPORTES DE DATOS - HL -

    - De manera predeterminada los marcadores est/n ocultos% pero pueden (acerse visi!les sise esta!lece la propiedad S(o#6oo+mar+s del o!"eto Fie# en True. El o!"eto Fie# es unmiem!ro de los o!"etos indo# & Pane% ,ue e:isten en los o!"etos Application &Document.

    Aun,ue el prop)sito de este li!ro no es pro$ramar en Fisual 6asic para Aplicaciones F6A creo ,ue esnecesario conocer los o!"etos del sot#are ,ue vamos a pro$ramar en este caso 'S ord.

    2ue$o de esta !reve revisi)n &a podemos crear un documento ,ue nos sirva de plantilla para llenarlocon los datos de la aplicaci)n.

    /.1.+. Creando e" Doc$mento en &S ?ord para e" In5orme

    Si ,ueremos crear un documento en 'icrosot ord ,ue sirva para aceptar datos desde unaaplicaci)n de!emos usar campos dentro de un ormulario.

    En $eneral% de!emos realiar los si$uientes pasos para crear un documento para nuestro inorme3

    1.A!rir el 'S ord% del !ot)n Kinicio% seleccionar Pro$ramas% lue$o 'icrosot Oice 8000 &inalmente 'icrosot ord.

    +.Del men Fer seleccionar 6arras de (erramientas & ele$ir *ormularios

    9ig$ra 10.//3 6arra de (erramientas de *ormularios de 'S ord.

    /. Empear a crear la parte i"a del documento% como títulos% p/rraos% mensa"es% im/$enes% ta!las%etc.

    2. Cuando desee crear un dato varia!le campo ,ue se llenar/ desde la !ase de datos u!icarse so!rela posici)n & clic en el primer !ot)n de la !arra de ormularios para insertar un Campo con te:to.

    3. Proceda a realiar el paso anterior para todos los campos o datos varia!les del documento &

    inalmente $ra!ar el documento en la carpeta donde est/ el e"ecuta!le de la aplicaci)n. Nota: uando desarrollamos aplicaciones la carpeta donde est" la

    aplicación (el e'ecuta&le o exe) es ?a carpeta  Bin ue se encuentra dentro de la carpeta con el 

     Proyecto.

    /.1./. F"enando e" Doc$mento con Datos de "a Ap"icaci#n

    ?na ve creado el documento (a& ,ue crear una aplicaci)n ,ue permita enviar los datos (acia eldocumento mediante pro$ramaci)n% a lo ,ue se le conoce como Automatiaci)n CO' oActiveZ.

    Para llenar un documento de 'S ord con datos de una vista desde la aplicaci)n de!emos realiar 

    los si$uientes pasos31.  =acer una reerencia a la li!rería de tipos de 'S ord3

    • Del men Pro"ect seleccionar Add Reerence.

    • Del di/lo$o seleccionar la se$unda ic(a CO'.

    • Seleccionar 'icrosot ord .0 O!"ect 2i!rar&.

    • Clic en el !ot)n Select & lue$o clic en O.

  • 8/18/2019 Ld9 Reporte Datos

    58/72

    10. CREANDO REPORTES DE DATOS - HM -

    Nota Por ser un componente CO' el Fisual Studio .NET crear/ unas li!rerías de interopera!ilidad entreCO' & .NET @Interop* las cuales se crean en el mismo directorio donde se e"ecuta la aplicaci)n.

    +. Crear un o!"eto ,ue apunte a la clase App"ication de ?ord

    Dim W As New Word.Application()

    /. A!rir el documento creado como plantilla para el inorme mediante el m7todo Open de lacolecci)n Doc$mcnts del o!"eto Application3

    W. Documents . "pen (8Archivo. doc8)

    2. Escri!ir cada valor de un campo de la vista en el campo del documento creado mediante la propiedad )tem de la colecci)n 9ie"ds del o!"eto Document de la aplicaci)n ord3

    W.ActiveDocument.,ields./tem(l).>esult.*e+t 2 dgdProducto./tem(N%

  • 8/18/2019 Ld9 Reporte Datos

    59/72

    10. CREANDO REPORTES DE DATOS - H -

    3. Crear una Aplicaci)n indo#s en Fisual 6asic .NET llamada Demo6+.

    4. En la ventana del e:plorador de soluciones seleccionar el arc(ivo *orm 1 & en la ventana de propiedades cam!iar la propiedad *ileName a 5rmCons$"taProd$ctosCategoria.

    6. En el diseador de ormularios indo#s% arrastrar un control 2a!el% un Com!o6o:% un Data

  • 8/18/2019 Ld9 Reporte Datos

    60/72

    10. CREANDO REPORTES DE DATOS - G0 -

    8. En la ventana e:plorador de soluciones dar clic en el !ot)n Fie# Code.

    10. En la parte superior del c)di$o antes de la clase deinir el Namespace del proveedor d` S923

    /mports Sstem.Data.S:lClient

    11. Declarar una varia!le privada para la vista de productos3

    Private dvw As Data!iew

    1+. Crear el procedimiento de evento F"enarDatos* ,ue ocurra en el evento 2oad del ormulario &escri!ir el si$uiente c)di$o3Private Su# 4lenarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  Dim con As New S:lConnection(8Persist Securit /n3o2,alse/ntegratedSecurit2SSP//nitial Catalog2Northwindserver2(local)8)  Dim dap As New S:lDataAdapter(8Select Categor/D%CategorName ,romCategories8% con)  Dim dst As New DataSet()  dap.,ill(dst% 8Categorias8)  dap.SelectCommand.Command*e+t 2 8SelectProduct/D%ProductName%GnitPrice%Categor/D ,rom Products8  dap.,ill(dst% 8Productos8)

      dvw 2 dst.*a#les(8Productos8).De3ault!iew  With c#oCategoria  .DataSource 2 dst.*a#les(8Categorias8)  .Displaem#er 2 8CategorName8  .!alueem#er 2 8Categor/D8  End With  dgdProducto.DataSource 2 dvw  End Su#

    1/. Crear el procedimiento de evento 9)"trarProd$ctos* ,ue ocurra en el eventoSelectionC(an$eCommitted del c!oCate$oria & escri!ir el si$uiente c)di$o3Private Su# ,illtrarProductos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles c#oCategoria.Selected/nde+Changed

      *r  dvw.>ow,ilter 2 8Categor/D28 I c#oCategoria.Selected!alue  Catch e+ As E+ception  End *r  End Su#

    12. Crear el procedimiento de evento CrearDoc$mento* ,ue ocurra en e" evento Clic+ del !ot)n!tnCrearDocumento & escri!ir el si$uiente c)di$o3Private Su# CrearDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnCrearDocumento.Clic5  Dim ruta As String 2 Application.StartupPath I 8/n3orme del Producto8  Dim N As /nteger 2 dgdProducto.Current>ow/nde+  Dim W As New Word.Application()  W.!isi#le 2 *rue

      W.Documents."pen(ruta I 8.doc8)  With W.ActiveDocument.,ields  ./tem(;).>esult.*e+t 2 dgdProducto./tem(N% esult.*e+t 2 dgdProducto./tem(N% ;)  ./tem().>esult.*e+t 2 dgdProducto./tem(N% 7)  ./tem(J).>esult.*e+t 2 dgdProducto./tem(N% )  End With  W.ActiveDocument.SaveAs(ruta I 8 8 I dgdProducto./tem(N% ;) I 8.doc8)  End Su#

     Nota:  El arc7ivo de

  • 8/18/2019 Ld9 Reporte Datos

    61/72

    10. CREANDO REPORTES DE DATOS - G1 -

    donde se encuentra la aplicación mediante la propiedad StartupPat" del o&'eto Application de .:E>.

    13. Coni$urar rmConsultaProductosCate$oria como el ormulario de inicio.

    14.

  • 8/18/2019 Ld9 Reporte Datos

    62/72

    10. CREANDO REPORTES DE DATOS - G8 -

    9ig$ra 10./33 Fentana del 'S ord con el documento creado.

    +0. Proceder a crear varios documentos para los productos deseados cerrando siempre ord

    +1. *inalmente% cerrar la ventana para inaliar la aplicaci)n.

    C#digo de" 5orm$"ario 5rmCons$"taProd$ctosCategoria de" Demo6+

    /mports Sstem.Data.S:lClientPu#lic Class 3rmConsultaProductosCategoria  /nherits Sstem.Windows.,orms.,orm  Private dvw As Data!iew  Private Su# 4lenarDatos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles Base.4oad  Dim con As New S:lConnection(8Persist Securit /n3o2,alse/ntegratedSecurit2SSP//nitial Catalog2Northwindserver2(local)8)  Dim dap As New S:lDataAdapter(8Select Categor/D%CategorName ,rom

    Categories8% con)  Dim dst As New DataSet()  dap.,ill(dst% 8Categorias8)  dap.SelectCommand.Command*e+t 2 8SelectProduct/D%ProductName%GnitPrice%Categor/D ,rom Products8  dap.,ill(dst% 8Productos8)  dvw 2 dst.*a#les(8Productos8).De3ault!iew  With c#oCategoria  .DataSource 2 dst.*a#les(8Categorias8)  .Displaem#er 2 8CategorName8  .!alueem#er 2 8Categor/D8

  • 8/18/2019 Ld9 Reporte Datos

    63/72

    10. CREANDO REPORTES DE DATOS - G> -

      End With  dgdProducto.DataSource 2 dvw  End Su#

      Private Su# ,illtrarProductos(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles c#oCategoria.Selected/nde+Changed  *r  dvw.>ow,ilter 2 8Categor/D28 I c#oCategoria.Selected!alue

      Catch e+ As E+ception  End *r  End Su#

      Private Su# CrearDocumento(B!al sender As Sstem."#$ect% B!al e As Sstem.EventArgs) 'andles #tnCrearDocumento.Clic5  Dim ruta As String 2 Application.StartupPath I 8/n3orme del Producto8  Dim N As /nteger 2 dgdProducto.Current>ow/nde+  Dim W As New Word.Application()  W.!isi#le 2 *rue  W.Documents."pen(ruta I 8.doc8)  With W.ActiveDocument.,ields  ./tem(;).>esult.*e+t 2 dgdProducto./tem(N% esult.*e+t 2 dgdProducto./tem(N% ;)  ./tem().>esult.*e+t 2 dgdProducto./tem(N% 7)  ./tem(J).>esult.*e+t 2 dgdProducto./tem(N% )  End With  W.ActiveDocument.SaveAs(ruta I 8 8 I dgdProducto./tem(N% ;) I 8.doc8)  End Su#End Class

    /.+. !sando &S Ece" para Crear -r,5icosTodos conocemos las prestaciones de 'S E:cel para realiar c/lculos% mane"ar datos & crear $r/icos.Esta uncionalidad tam!i7n esta disponi!le para los pro$ramadores a trav7s de su modelo de o!"etos%,ue a continuaci)n revisamos.

    /.+.1. Entendiendo e" &ode"o de Objetos de &S Ece"Para desarrollar soluciones ,ue utilice 'icrosot E:cel% de!e interactuar con los o!"etos proporcionados por el modelo de o!"etos de E:cel. Principalmente% descu!rir/ ,ue el modelo deo!"etos emula directamente la intera de usuario. Por e"emplo% el o!"eto Application proporciona uncontenedor de toda la aplicaci)n & cada o!"eto or+!oo+ contiene una colecci)n de o!"etosor+s(eet. A partir de este punto% la a!stracci)n principal ,ue representa las celdas es el o!"eto Ran$e%,ue permite tra!a"ar con celdas individuales o con un $rupo de celdas.

    E:cel proporciona cientos de o!"etos con los ,ue ,ui/ desee interactuar% pero puede empear a tra!a"ar con el modelo de o!"etos centr/ndose en un su!con"unto mu& pe,ueo de los o!"etos disponi!les.Entre ellos% ca!e destacar3

    ; App"ication

    El o!"eto Application de E:cel representa la propia aplicaci)n. Este o!"eto proporciona muc(ainormaci)n so!re la aplicaci)n en e"ecuci)n% las opciones ,ue se aplican a esa instancia & loso!"etos de usuario actuales ,ue se a!ren en cada instancia.

    ; ?orHbooH 

    2a clase or+!o+ representa un solo li!ro dentro de la aplicaci)n E:cel. 'uc(os de losmiem!ros de la clase Application tam!i7n se muestran como miem!ros de la clase or+!oo+. En

  • 8/18/2019 Ld9 Reporte Datos

    64/72

    10. CREANDO REPORTES DE DATOS - GB -

    este caso% las propiedades se aplican a un li!ro especíico% en ve de aplicarlas al li!ro activocompleto.

    J ?orHseet

    Aun,ue la clase or+s(eet proporciona muc(os miem!ros% la ma&oría de las propiedades% de losm7todos & de los eventos sor id7nticos o similares a los miem!ros proporcionados por las clasesApplication o or+!oo+.

    E:cel proporciona una colecci)n S(eets como propiedad de un o!"eto or+!oo+% pero no e:istenin$una clase S(eet en E:cel. En su lu$ar% cada miem!ro de la colecci)n S(eets es un o!"etoor+s(eet o C(art.

    J Range

    El o!"eto Ran$e es el ,ue utiliar/ con ma&or recuencia en las aplicaciones de E:cel. Antes de ,ue pueda manipular una re$i)n de E:cel% de!e e:presarla corno o!"eto Ran$e & tra!a"ar con losm7todos & las propiedades de este o!"eto. ?n o!"eto Ran$e representa una celda% una ila% unacolumna% una selecci)n de celdas ,ue contie