Compartir a través de


Enlazar a una clase de informe incrustado proyectado a ReportDocument

Modelo de objetos

Este caso de enlace de informes utiliza Enlazar informes al modelo de objetos ReportDocument.

Ubicación de los informes

Los informes se incrustan en el proyecto.

Nota

En las versiones anteriores de esta documentación se hacía referencia a los informes incrustados como "con tipos declarados". El término que se usa ahora para hacer referencia a un informe que se agrega o importa a un proyecto de Visual Studio es "incrustado".

Descripción

Este caso de enlace de informes se extiende desde el caso Enlazar a una clase de informe incrustado. En este caso, enlace muchos informes incrustados a un proyecto que utiliza un conjunto de códigos común, en vez de tener que codificar cada uno individualmente.

En este caso de enlace de informes, agregue muchos informes incrustados al proyecto. Pero no enlace ninguno de los informes incrustados al control CrystalReportViewer directamente. En su lugar, ejecute un método de utilidad que utilice criterios de selección para seleccionar uno de los informes incrustados. La utilidad proyecta el informe a una instancia de ReportDocument. A continuación, la ReportDocument se enlaza al control.

Nota

ReportDocument es una clase base desde la que heredan todos los informes incrustados. Por tanto, cualquier informe incrustado se puede proyectar a ReportDocument.

Ventajas

  • Código mejorado mediante refactorización: un conjunto de códigos de enlace de informe común interactúa con cualquiera de los muchos informes incrustados. En el caso anterior, incrementaría la carga de trabajo al tener que codificar manualmente cada informe incrustado.
  • Menos codificación gracias al uso compartido del código: puede escribir código adicional para la instancia de ReportDocument, con el fin de interactuar completamente con el modelo de objetos ReportDocument. Todo el código se escribe sólo una vez, pero actúa en cada informe incrustado correcto que se proyecta a la instancia de ReportDocument.
  • El resto de las ventajas se encuentran en Enlazar a una clase de informe incrustado.

Desventajas

  • Mantenimiento agregado: los cambios en los informes implican la necesidad de compilar y redistribuir la aplicación de nuevo.

Para enlazar una clase de informe incrustado que se proyecta a ReportDocument

Nota

Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, que no se podrá completar sin dicha configuración. Por lo tanto, antes de empezar con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.

  1. Agregue dos informes de muestra adicionales al proyecto:

  2. Agregue un enunciado "Imports" [Visual Basic] o "using" [C#] al principio de la clase para el espacio de nombres CrystalDecisions.CrystalReports.Engine.

    Nota

    Debe declarar este espacio de nombres para utilizar la clase ReportDocument sin ningún prefijo de espacio de nombres, y para tener acceso a él desde IntelliSense.

    Imports CrystalDecisions.CrystalReports.Engine
    
    using CrystalDecisions.CrystalReports.Engine;
    
  3. Cree un método auxiliar privado para la selección de informes, como se muestra a continuación.

    Este método recibe un parámetro de entero y lo pasa mediante un enunciado "Select Case" [Visual Basic] o "switch" [C#] para seleccionar un informe. En cada caso, crea una instancia y devuelve un informe en particular (proyectado a su clase base, ReportDocument).

    Private Function ChooseReport(ByVal i As Integer) As ReportDocument
    Select Case i
    Case 1
    Dim chartReport As Chart = New Chart()
    Return CType(chartReport, ReportDocument)
    Case 2
    Dim hierarchicalGroupingReport As Hierarchical_Grouping
    = New Hierarchical_Grouping()
    Return CType(hierarchicalGroupingReport,
    ReportDocument)
    Case Else
    Dim worldSalesReport As World_Sales_Report = New
    World_Sales_Report()
    Return CType(worldSalesReport, ReportDocument)
    End Select
    End Function
    
    private ReportDocument ChooseReport(int i)
    {
    switch(i)
    {
    case 1:
    Chart chartReport = new Chart();
    return (ReportDocument)chartReport;
    case 2:
    Hierarchical_Grouping hierarchicalGroupingReport = new
    Hierarchical_Grouping();
    return (ReportDocument)hierarchicalGroupingReport;
    default:
    World_Sales_Report worldSalesReport = new
    World_Sales_Report ();
    return (ReportDocument)worldSalesReport;
    
    };
    }
    
  4. En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos), elimine el código existente y reemplácelo por las siguientes nuevas líneas de código.

  5. Declare una instancia de ReportDocument y llénela llamando al método ChooseReport(), y pasando el número entero 1 para seleccionar el primer informe, Chart.rpt.

    Dim myReportDocument As ReportDocument = ChooseReport(1)
    
    ReportDocument reportDocument = ChooseReport(1);
    
  6. Puede crear un marcador en el que codificar la instancia de ReportDocument.

En este ejemplo, se pueden filtrar los datos de los informes con la propiedad RecordSelectionFormula. Puesto que ReportDocument representa una gran variedad de informes posibles, el filtro se aplica a todos los informe que se le pasan. Por el momento, pase una cadena vacía.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Esta línea de código muestra la forma en que una proyección a la clase base común, ReportDocument, permite escribir código común en muchos informes.</p></td>
</tr>
</tbody>
</table>

``` vb
myReportDocument.RecordSelectionFormula = ""
```

``` csharp
reportDocument.RecordSelectionFormula = "";
```
  1. Asigne la instancia de ReportDocument a la propiedad ReportSource del control CrystalReportViewer.

    myCrystalReportViewer.ReportSource = myReportDocument
    
    crystalReportViewer.ReportSource = reportDocument;
    
  2. Para ver el informe, cree y ejecute el proyecto.

Vea también