Announcement

Collapse
No announcement yet.

Crystal Report und Datenanbindung im Source - Code

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Crystal Report und Datenanbindung im Source - Code

    Hallo,

    ich habe das Problem, das aus VB.net heraus der CR - Viewer angezeigt wird (mit einem Bericht). Jedoch werden hier nicht die aktuellen Werte angezeigt, sondern die des 1. Datensatzes aus der Tabelle.

    Wenn ich ein Refresh - Report ausführe, soll der User seine DB - Anmeldedaten eingeben (Server, Tabelle, Name, Passwort). Das ist für mich nicht aktzeptabel, so dass ich auf folgende Lösung gekommen bin:

    (Natürlich verwende ich andere Login - Infos, aber um es zu verdeutlichen :-))

    Me.crystalReportViewer.LogOnInfo(0).ConnectionInfo .ServerName = "Server1"
    Me.crystalReportViewer.LogOnInfo(0).ConnectionInfo .DatabaseName = "Datenbank"
    Me.crystalReportViewer.LogOnInfo(0).ConnectionInfo .UserID = "p_thorn"
    Me.crystalReportViewer.LogOnInfo(0).ConnectionInfo .Password = "p_thorn"

    Me.crystalReportViewer.LogOnInfo(1).ConnectionInfo .ServerName = "Server1"
    Me.crystalReportViewer.LogOnInfo(1).ConnectionInfo .DatabaseName = "Datenbank"
    Me.crystalReportViewer.LogOnInfo(1).ConnectionInfo .UserID = "p_thorn"
    Me.crystalReportViewer.LogOnInfo(1).ConnectionInfo .Password = "p_thorn"

    Das Problem ist, dass immer noch die Anmelde - Maske kommt, der Report also nicht refresht werden kann ohne manuelle Eingabe der Anmelde - Informationen.

    Kann mir jemand helfen???
    Vielen Dank

    Peter

    Me.crystalReportViewer().RefreshReport()
    Me.crystalReportViewer.ShowFirstPage()

  • #2
    Hallo,

    wenn die im Report darzustellenden Daten bereits in einem DataSet enthalten sind, kann dieses direkt als Datenquelle für den Report verwendet werden. Dies bedeutet, dass der Report erst gar keine eigene Verbindung zur Datenbank aufbauen muss. Das folgende Beispiel demonstriert dies (dabei erledigt <b>SetDataSource</b> alles Notwendige, der Rest ist "schmückendes Beiwerk"):

    <pre>
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.SqlDataAdapter1.Fill(OsDatasetReport1)
    ' Zum Test 2 neue Datensätze dem DataSet hinzufügen
    Me.OsDatasetReport1.Customers.AddCustomersRow("KOS CH", "OssiSoft", "Andreas Kosch", _
    "Entwickler", "Irgendwo", "Überall", "Thüringen", "99869", "S&S", "leer", "leer")
    Me.OsDatasetReport1.Customers.AddCustomersRow("DYN DS", "DataRow:", "Dynamisch generiert", _
    "Laufzeit", " ", " ", " ", " ", "S&S", " ", " ")
    ' Erweitertes DataSet als Datenquelle für den Report zuweisen
    ' (die beiden neuen Datensätze müssen als Land "S&S" sichtbar sein!)
    Me.osCustomerDemo11.SetDataSource(OsDatasetReport1 )
    Me.CrystalReportViewer1.ReportSource = osCustomerDemo11
    ' Report als PDF-Datei exportieren
    MessageBox.Show("Export als PDF-Datei wird gestartet...", "Crystal Report 9")
    Dim aCRDFDO As New CrystalDecisions.Shared.DiskFileDestinationOptions ()
    Dim sFileName As String = "C:\Temp\DataSetReport.pdf"
    aCRDFDO.DiskFileName = sFileName
    With osCustomerDemo11
    .ExportOptions.ExportDestinationType = _
    CrystalDecisions.Shared.ExportDestinationType.Disk File
    .ExportOptions.ExportFormatType = _
    CrystalDecisions.Shared.ExportFormatType.PortableD ocFormat
    .ExportOptions.DestinationOptions = aCRDFDO
    .Export()
    End With
    MessageBox.Show("...Export als PDF-Datei ist fertig!", "Crystal Report 9")
    End Sub
    </pre>
    Ansonsten sieht die Übergabe der Login-Daten für den Datenbankzugriff durch den Report wie folgt aus:
    <pre>
    ' Strongly typed report nutzen
    ' 1. Toolbox | Components | ReportDocument auf das Formular ziehen
    ' 2. Dialog "Choose a ReportDocument" erscheint, vorbelegte Klasse übernehmen

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Step 1: Login-Daten für den MS SQL Server 2000 übergeben
    Dim aCREngTbl As CrystalDecisions.CrystalReports.Engine.Table
    Dim aCRTLOI As CrystalDecisions.Shared.TableLogOnInfo
    For Each aCREngTbl In osLoginDemo21.Database.Tables
    aCRTLOI = aCREngTbl.LogOnInfo
    With aCRTLOI.ConnectionInfo
    .ServerName = "(local)"
    .UserID = "sa"
    .Password = "sa"
    .DatabaseName = "Northwind"
    End With
    aCREngTbl.ApplyLogOnInfo(aCRTLOI)
    Next aCREngTbl
    ' Step 2: ReportSource über die Komponente mit dem als Ressource
    ' eingebetteten Report verbinden (siehe Properties-Window
    ' zur im Solution Explorer ausgewählten .RPT-Datei,
    ' Eintrag: Build Action)
    Me.CrystalReportViewer1.ReportSource = Me.osLoginDemo21
    End Sub
    </pre>
    Wenn im Sourcecode ein falsches Passwort übergeben wird, zeigt das Programm automatisch den Login-Dialog mit dem leeren Passwortfeld an, so dass nach dem korrekten Passwort-Eintrag der Report trotzdem angezeigt wird

    Comment

    Working...
    X