2010-03-15 7 views
1

J'utilise Visual Studio 2005 avec VB.NET.Aide découplage Crystal Report de CrystalReportViewer

J'ai un certain nombre de Crystal Reports, chacun avec leur propre ressource de dialogue associée contenant un CrystalReportViewer. Les définitions de classe ressemblent à ceci:

Imports System.Windows.Forms 
Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 

Public Class dlgForMyReport 

    Private theReport As New myCrystalReport 
    Public theItems As New List(Of MyItem) 

    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click 
     Me.DialogResult = System.Windows.Forms.DialogResult.OK 
     Me.Close() 
    End Sub 

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click 
     Me.DialogResult = System.Windows.Forms.DialogResult.Cancel 
     Me.Close() 
    End Sub 

    Private Sub dlgForMyReport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     theReport.SetDataSource(theItems) 

     'Do a bunch of stuff here to set data items in theReport 

     Me.myCrystalReportViewer.ReportSource = theReport 
    End Sub 

End Class 

J'instancier essentiellement la boîte de dialogue, mis theItems à la liste que je veux, et appelle ShowDialog.

J'ai maintenant besoin de combiner plusieurs de ces rapports dans un seul rapport (possibly like this) mais le code qui charge les champs dans le rapport est dans la boîte de dialogue.

Comment procéder pour découpler l'initialisation du rapport de la boîte de dialogue?

Merci!

Répondre

1

Vous pouvez tout à fait avoir facilement un rapport générique de visualisation de dialogue qui a une instance de la classe de base pour les rapports (Ie CrystalReport) et avoir afficher que - vous n'avez pas besoin de typer le rapport sur toute la par.

+0

Merci Rowland. Si je comprends bien, alors, je viens de charger les données du rapport ailleurs, définir et lier l'objet CrystalReport, et afficher la boîte de dialogue? – John

+0

@John exactement cela. En effet, vous changez votre code pour que 'theReport' soit exposé comme une propriété de type CrystalReport, vous pouvez alors le définir comme un nouveau' myCrystalReport' et afficher le dialogue ou tout autre objet CrystalReport –

+0

Travaillé comme un charme. Merci! – John