Berichtsparameter zur Datenfilterung per Code übergeben

Hallo Zusammen,
ich arbeite mich gerade in die Datenbindung und List&Label unter VB.Net ein. Daher weiß ich nicht, ob eventuell schon mein Ansatz falsch ist oder nur die Umsetzung.
Die verwendete Version ist List&Label 28.004

Ich habe eine Tabelle mit je einem Eintrag pro zu druckendem Beleg. Unter anderem ist hierin ein Feld mit einer GUID, über die ich den Beleg eindeutig identifizieren kann. Ich möchte jetzt in einer Schleife mittels LL.Print() bzw. LL.Export() die Belege erzeugen. Die Daten für den Report stelle ich per SqlConnectionDataProvider bereit. Das funktioniert auch wunderbar. Allerdings würden so natürlich je Aufruf alle Belege erzeugt werden und nicht nur die, die ich wirklich drucken will. Daher hatte ich die Idee einen Berichtsparameter im Design anzulegen und diesen als Filterkriterium zu nutzen.

Vor dem Aufruf von LL.Print() übergebe ich die GUID auf folgende Weise:
LL.ProjectParameters.Item("@Reference").Value = "'A28BF0C1-3143-4263-B143-E6249AE6E4BF'"
Dies wird allerdings gänzlich ignoriert. Im Gegenteil erhalte ich sogar einen Eingabedialog, in dem ich einen Wert manuell eintragen kann. Wenn ich das mit LL.Export() versuche, kommt zwar kein Dialog, aber eine Filterung passiert auch nicht.

Hier der gesamte Quelltext:

Private Sub bnPrint_Click(sender As Object, e As EventArgs) Handles bnPrint.Click
        Dim prov As New SqlConnectionDataProvider(New SqlClient.SqlConnection(CntStr))

        LL.SetDataBinding(prov, "SALESINVOICE")
        LL.AutoMasterMode = LlAutoMasterMode.AsVariables

        LL.ProjectParameters.Item("@Reference").Value = "'A28BF0C1-3143-4263-B143-E6249AE6E4BF'"

        LL.AutoShowPrintOptions = False

        'LL.Print(LlProject.List, "C:\tmp\OA5E\Ticketrechnung.lst", False, LlPrintMode.Normal)
        LL.Export(New ExportConfiguration(LlExportTarget.Pdf, "C:\tmp\OA5E\Ticketrechnung.pdf", "C:\tmp\OA5E\Ticketrechnung.lst"))
    End Sub

Was mache ich falsch?

Gruß
Björn

Wenn schon vorher gewusst wird, welcher “Filter” verwendet werden soll, dann biete sich es aber auch anstelle des SqlConnectionDataProviders zu verwenden(liefert ja immer die ganze DB zurück) vielleicht besser den DbCommandSetDataProvider mit AddCommand() zu verwenden, da hier das SQL direkt übergeben werden könnte - oder sogar mit einer Stored Procedure: Verwendung des DbCommandSetDataProviders mit Stored Procedures. Dann wäre keine Filterung im Bericht notwendig.

Hallo!

Hast du den Datenfilter im Report (z.B. bei einer Tabelle) hinterlegt?

Grüße

HP

Ja, habe ich hinterlegt. Im Designer sieht es so aus:

@Oliver_Hambrecht:
Ich würde gerne mit dem Sql Provider arbeiten, da ich verschiedene Belegtypen habe und dann immer unterschiedliche SQL Commands mitgeben müsste.

So ist der Parameter eingerichtet:

In Ordnung - ein echter Berichtsparameter im Designer. Im Code könnte dieser aber noch so manipuliert werden: Berichtsparameter zur Laufzeit für den Druck/Export modifizieren/ändern. Das sollte dann eigentlich helfen.

Vielen Dank! Das hatte ich schon gefunden, erschien mir allerdings für diese “simple” Anforderung doch recht komplex. Daher komme ich noch einmal zurück zu meiner Ausgangsfrage. Bin ich überhaupt auf dem richtigen Weg das so zu lösen, oder kann man beispielsweise einen Filter auch viel einfacher übergeben?

OK, ich habe das jetzt so mal umgesetzt und würde von einem Teilerfolg sprechen. Der Dialog für die Parametereingabe kommt immer noch, ist jetzt allerdings ausgefüllt. Wie kann ich jetzt noch verhindern, dass er angezeigt wird?
Parametereingabe

Habe es gefunden:
Verfügbare Werte: manuelle Eingabe
sichtbar: nein

1 Like