ich habe eine Datenstruktur, in der eine Liste von Personen geführt wird. Jeder Person wiederum ist eine Liste von Projekten zugeordnet. Die Objekte zu der Datenstruktur werden durch einen ObjectDataProvider(Personen) verwaltet:
public List<Person> Personen { get; set; }
public class Person
{
public string Name { get; set; }
public List<Projekt> { get; set; }
...
}
public class Projekt
{
public string Projektnummer { get; set; }
...
}
Die DrillDown-Verknüpfung ist wie folgt definiert:
Über einen Bericht zeige ich alle Personen an und bei der Anwahl einer Zeile (“Öffnen”) werden die zu der Person zugeordneten Projekte in einem DrillDown-Unterbericht angezeigt.
Nun möchte ich den Namen der Person in der Titelzeile des Unterberichtes anzeigen. Geht das?
crauchfuss
(combit Support - Christian Rauchfuß)
2
Hallo Marcus,
eine solche Anforderung lässt sich mittels Drilldown über Berichtsparameter umsetzen. Beim Anlegen der Drilldown-Verknüpfung wird der Typ abgefragt. Wähle hier “Drilldown über Berichtsparameter”.
Im Unterbericht kann dann mit einem oder auch mehreren Berichtsparametern gearbeitet werden. Diese können via Projekt > Berichtsparameter erstellt werden. Den Berichtsparameter benötigt es auf der einen Seite, um die Datentabellen miteinander zu verknüpfen und die Daten entsprechend zu filtern und auf der Seite können die Berichtsparameter auch verschiedene Inhalte außerhalb der Tabelle abbilden.
Gerne hänge ich einmal einen solchen Report samt Drilldown für die List & Label Beispielanwendung mit an (..\combit\LL31\Beispielanwendung\DemoApplication31.exe, Rubrik Berichte). Siehe Download am Ende.
Der Unterbericht “SubReport_Details.lsr” verfügt über zwei Berichtsparameter.
@MitarbeiterDetails ist für die Filterung der Daten verantwortlich und wird im Datenfilter für die Tabelle verwendet (siehe gelbe Markierung). @Mitarbeitername beinhaltet lediglich die Informationen “Name” + “Vorname” und wird im Titel des Unterberichts verwendet (grüne Markierung).
so ganz verstehe ich es noch nicht. Aber zumindest bekomme ich schon einmal, wie in Deinem Beispiel gezeigt, die Namen in die Titelzeile des Unterberichtes.
Aber… Egal, welchen Namen ich im Hauptbericht anwähle, die Liste der Projekte entspricht immer der Projektliste der ersten Person.
Meine c# Datenstruktur oder besser Objektstruktur sieht wie folgt aus:
+ -- Person 1 | |- Name | \– Liste von Projekten der Person 1 + -- Person 2 | |- Name | \– Liste von Projekten der Person 2 ...
Der Hauptbericht zeigt eine Auflistung der “Personen”, im DrillDown möchte ich die Liste der Projekte zu der gewählten Person anzeigen. “Projekte” sind bei mir Elemente mit individuellen Ausprägungen, wie die Summe von Arbeitsstunden, Arbeitskosten und weiteren diversen Berechnungen zu der Person in den einzelnen Projekten. Speziell die Stunden sollen später in einem weiteren DrillDown-Bericht als Unterbericht zu den Projekten kommen.
Ich habe die Datenfilter-Definition aus Deinem Beispiel nicht so ganz verstanden:
Benötigt die Klasse “Person” eine Referenz in die Liste der Personen, in der sie enthalten ist um für den DrillDown über die Id- der “Person” auf deren Projektliste zu filtern? Oder denke ich da viel zu kompliziert? Mir ist die Semantik und auch die Syntax des Filterausdrucks nicht so ganz klar.
Ich hoffe, ich habe mein Problem verständlich dargestellt.
Grüße und vielen Dank vorab
Marcus
crauchfuss
(combit Support - Christian Rauchfuß)
4
Hi Marcus,
das Verhalten könnte darauf hindeuten, dass die “falsche” Projekt-Tabelle im Drilldownbericht verwendet wird. Hilft es in dem Drilldown-Bericht, die relationale Projekte-Tabelle zu platzieren (Person → Projekte):
Noch ein Gedanke: Wenn du bei Drilldown über Relationen bleibst, dann könntest du den Person.Name auch in den Projekten mit anmelden, um diesen in einem Berichtsparameter zu verwenden:
Deine Tipps haben wir leider nicht so wirklich geholfen.
Deshalb habe ich Dir jetzt ein c#-Beispielprogramm zusammengestellt, welches zeigen soll, wie ich das von mir Beschriebene umgesetzt habe und wo dabei meine Probleme sind.
Mit dem Programm kannst Du den Bericht “Persons.lst” im Designer bearbeiten und/oder in der Vorschau Dir anzeigen lassen.
Über den “Öffnen…” in Persons.lst rufst Du die Projekte zu der jeweiligen Person auf. Es gibt zwei DrillDowns:
Person2ProjectsRelationen.lst = “DrillDown über Relationen”
Person2ProjectsBerichtsParameter.lst = “DrillDown über Berichtsparameter“
So, wie ich es umgesetzt habe, zeigt “Person2ProjectsRelationen.lst“ zwar die korrekte Liste der Projekte an, allerdings bekomme ich in dieser Auswertung den Namen der Person angezeigt. Im Gegensatz dazu habe ich in “Person2ProjectsBerichtsParameter.lst“ zwar den korrekten Namen, aber mir werden immer nur die Projekte der ersten Person angezeigt, egal bei welcher Person ich “Öffnen…” anwähle.
Ich hoffe, die Beispiele helfen Dir, meine Schwierigkeiten zu verstehen.
Vielen Dank vorab
Hi Marcus, dein Problem hier ist, dass du im Berichtsparameter Case keinen Filter hast, deshalb werden die nicht zugehörigen Projekte angezeigt, im Drilldownbericht mit den Parametern müsstest du in der Tabelle Projekt den Filter mit der PersonId (was du nicht hast) setzten, also Projekt.PersonId == @PersonIdPersonId. Ich habe das jetzt nur mal so überflogen, gehe aber davon aus das du deine Datenanmeldung ändern musst, also das DataBinding, ich könnt mir das am WE mal in Ruhe anschauen und dir einen detaillierteren Vorschlag geben.