Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Bilder in Berichten nebeneinander anordnen

Das Anordnen vieler Bilder in Berichten ist in vielen Fllen sinnvoll. Noch besser wre es, diese nebeneinander anzuordnen. Knifflig wird dies dann, wenn man etwa mehrere Bilder zu einem Datensatz ausgeben mchte. Dieser Beitrag zeigt, wie es geht.

Beispieldatenbank

Eine Datenbank mit dem hier vorgestellten Beispielbericht finden Sie unter folgendem Link:

Bericht mit vielen Bildern

Als Beispiel dient eine Teamverwaltung. Die Teams werden in einer Tabelle verwaltet, die passenden Mitglieder in einer zweiten, per 1:n-Beziehung mit der ersten verknpften Tabelle. Das Datenmodell sieht wie in Abbildung 1 aus.

Abbildung 1: Datenmodell der Beispieldatenbank

Der Bericht der Beispieldatenbank soll die Teams mit den Bildern ihrer Mitglieder wie in der folgenden Abbildung anzeigen.

Abbildung 2: Bilder von Teammitgliedern im Bericht

Um diese Darstellung zu erreichen, ist gar kein groer Zauber erforderlich. Als Datenherkunft dient dabei einfach eine Abfrage, die beide Tabellen der Datenbank mit allen Feldern enthlt.

Fgen Sie dem leeren Bericht eine Gruppierung ber das Feld TeamID der Tabelle tblTeams hinzu und stellen Sie die Eigenschaft Gruppenkopf fr diese Gruppierung auf Ja ein.

In den nun erscheinenden Bereich fgen Sie aus der Feldliste die beiden Felder TeamID und Teambezeichnung der Datenherkunft ein.

Der Detailbereich wird wie in Abbildung 3 mit den beiden Feldern Mitgliedname und Bildpfad bestckt.

Abbildung 3: Entwurfsansicht des Berichts

Das allein ist jedoch noch nicht die Lsung. Es fehlen noch ein paar Zeilen Code. Das komplette Modul des Berichts sieht wie folgt aus:

Option Compare Database

Option Explicit

 

Dim i As Integer

 

Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

    i = i + 1

    If i Mod 2 = 1 Then

        Me!picMitglied.Left = 0

        Me!Mitgliedname.Left = 0

        Me!Bildpfad.Left = 0

        Me.MoveLayout = False

    Else

        Me!picMitglied.Left = 4000

        Me!Mitgliedname.Left = 4000

        Me!Bildpfad.Left = 4000

        Me.MoveLayout = True

    End If

    If i = DCount("MitgliedID", "tblMitglieder", "TeamID = " & Me!TeamID) Then

        Me.MoveLayout = True

    End If

    Me!picMitglied.Picture = CurrentProject.Path & "\" & Me!Bildpfad

End Sub

 

Private Sub Gruppenkopf0_Format(Cancel As Integer, FormatCount As Integer)

    i = 0

End Sub

Der Code funktioniert so: Mit Erreichen einer neuen Gruppierung (also eines neuen Teams) wird die Laufvariable i auf 0 gesetzt. Diese Variable wird andererseits bei jeder Ausgabe des Detailbereichs um 1 erhht. Eine If Then-Bedingung prft mit dem Ausdruck i Mod 2 = 1, ob i gerade oder ungerade ist. Ist i ungerade, soll das Bild links dargestellt werden, wenn i gerade ist, auf der rechten Seite. Wenn das Bild auf der linken Seite Platz findet, soll das Bild des nchsten Datensatzes auf der rechten Seite platziert werden - aber auf der gleichen Hhe. Deshalb stellt die Routine die Eigenschaft MoveLayout des Detailbereichs auf False ein - es findet kein Sprung in die nchste Zeile statt.

Wenn ein Team eine ungerade Anzahl Mitglieder hat und das letzte Mitglied dementsprechend auf der linken Seite platziert wurde, muss man MoveLayout dennoch auf True einstellen, damit die Daten des folgenden Teams wieder in eine neue Zeile geschrieben werden.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.