Event für Berichtsparameter - Refresh

Hallo,

gibt es eine Möglichkeit, den Buttonpress des Refresh Buttons bei Verwendung von Berichtsparametern abzufangen?

Gruß, Werner

Hallo Herr Erhart,

könnten Sie uns womöglich noch genauer beschreiben welche Zielsetzung Sie haben? Dann könnten wir Ihnen ggf. eine detaillierte Lösung anbieten.

Viele Grüße vom Bodensee

Hallo Herr Litkin,

Im Form, welches auch das Preview enthält, gibt es einen Refresh- Button. Der Benutzer kann verschiedene Optionen und auch die Ausgabesprache wählen, dafür das Refresh. Bei jedem Refresh wird der Report neu geladen und ein Statuslabel angezeigt, da die Aufbereitung des Reports doch recht lange braucht.

Währenddessen zeige ich ein Statuslabel im Form an, welches beim Event “PrintingFinished” wieder verborgen wird.

Nun besitzt der Report auch Berichtsparameter die zusätzliche Filterungen ermöglichen. Drückt der Benutzer jetzt aber auf den (Report-eigenen) Refresh Button, bekomme ich das nicht mit und kann dem Benutzer auch die “Bitte warten …” Nachricht nicht anzeigen…

Grüße aus Wien !

Hallo Herr Erhart,

vielen Dank für Ihre ausführliche Beschreibung. In diesem Fall könnten Sie das “DefinePrintOptionsEvent” handeln. Da dieses, bei jedem Druck schon sehr früh ausgelöst werden sollte, können Sie darin das Label ändern.

Viele Grüße

Hallo Herr Litkin,

das funktioniert leider nicht. Generell habe ich ein Problem mit dem LL Control. Sobald ich in einem der Events ein Form -Control anspreche, gibt es eine Threadverletzung und das Programm schmiert ab.

Und getesteter Weise blockiert der Berichtsparameter Refresh die gesamte Anwendung. Nicht einmal mehr Timer Events werden abgearbeitet …

Gruß, W. Erhart

Guten Morgen,

der Druck der Vorschau findet in einem separaten Thread statt. Zugriffe auf UI-Controls müssen aber aus dem Hauptthread erfolgen. Sie können einmal einen Blick auf die Datei Form1.cs im DataBindingSample Ihrer List & Label Installation werfen, dort sehen Sie im LL_NotifyProgress Handler, wie ein Zugriff erfolgreich erfolgen kann: der Eventhandler ruft sich - wenn nötig - selbst im richtigen Thread noch einmal auf:

    private void LL_NotifyProgress(object sender, NotifyProgressEventArgs e)
    {
        if (InvokeRequired)
        {
            BeginInvoke(new MethodInvoker(delegate
            {
                LL_NotifyProgress(sender, e);
            }));
        }
        else
        {
            if (e.Percentage == 100)
            {
                progressBar1.Visible = false;
                return;
            }

            progressBar1.Visible = true;
            progressBar1.Value = e.Percentage;
        }
    }

Auf diese Weise sollte es an sich auch bei Ihnen korrekt funktionieren.

Viele Grüße

Hallo Herr Litkin,

danke, damit funktioniert es nun in der Tat. Vielleich kann man das Tutorial dahingehend erweitern und diese Information allgemeiner zugänglich machen. Für mich war das beim Einarbeiten in LL nicht klar.

Hier noch die VB Version für Mitleser:

    Private Sub llPreview_DefinePrintOptions(sender As Object, e As EventArgs) Handles llPreview.DefinePrintOptions
    Try
        If InvokeRequired Then
            Me.Invoke(Sub() llPreview_DefinePrintOptions(sender, e))
        Else

            lbl_WaitReport.Visible = True
        End If
    Catch ex As Exception

    End Try
End Sub

Danke &
Gruß aus Wien

1 Like