Laden...

RDLC-Report: Anzeige von Wert in DataSet1 abhängig von Wert aus DataSet2

Erstellt von Luna1987 vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.325 Views
L
Luna1987 Themenstarter:in
43 Beiträge seit 2009
vor 9 Jahren
RDLC-Report: Anzeige von Wert in DataSet1 abhängig von Wert aus DataSet2

Hallo zusammen 😃
Ich habe eine xml-Datei, die von der Struktur her (grob) wie folgt aussieht:


?xml version="1.0" encoding="utf-8"?>
     <EventData>
          <ListOfEvents Index="A" >
                    <Event ID="1" Name="Event001" />
                    <Event ID="2" Name="Event002" />
                    <Event … />
          </ListOfEvents>
          <ListOfEvents Index="B" >
                    <Event ID="1" Name="Event001" />
                    <Event ID="2" Name="Event002" />
                    <Event … />
          </ListOfEvents>
     </EventData>

Diese xml-Datei deserialisiere ich und ordne sie einem DataGrid zu und zeige abhängig vom gewählten (Event)Index (z.B. "A") die "Events" in dem DataGrid an. Nun möchte ich auf Knopfdruck einen rdlc-Bericht dieser Tabelle erzeugen. Ich benutze dafür den ReportPrinter und gebe ja als PathToData meinen xml-Dateipfad an.


                    ReportPrinter p = new ReportPrinter()
                    {
                        PathToOutput = saveFileDialog.FileName,
                        PathToData = this.filePath,
                        PathToReport = @".\ReportPrinter\config\Report.rdlc",
                        DeviceInfo = @"<DeviceInfo>
                                <OutputFormat>EMF</OutputFormat>
                                <PageWidth>297mm</PageWidth>
                                <PageHeight>210mm</PageHeight>
                                <MarginTop>0mm</MarginTop>
                                <MarginLeft>0mm</MarginLeft>
                                <MarginRight>0mm</MarginRight>
                                <MarginBottom>0mm</MarginBottom>
                                </DeviceInfo>"
                    };

Leider schreibt er mir nun in dem Report ALLE "Events" aller "ListOfEvents". Ich würde aber gerne nur, abhängig vom gewählten (Event)Index die zugehörigen Events in meinem Bericht haben.

Nun könnte ich ja z.B. über die Sichtbarkeit folgenden Ausdruck definieren:

=IIF((Fields!Index.Value, "ListOfEvents") = A, false, true)

(Tabelle, der das DataSet „Event“ zugeordnet ist --> Rechtsklick auf Textfeld in dieser Tabelle --> Textfeldeigenschaften --> Sichtbarkeit --> Je nach Ausdruck einblenden / ausblenden --> oben genannten Ausdruck eingeben).

Leider funktioniert das nicht 😕 Ich bekomme eine Fehlermeldung, wenn ich den Bericht erzeuge. Wenn ich

=IIF(First(Fields!Index.Value, "ListOfEvents") = A, false, true) 

verwende, dann wird zwar der Bericht erzeugt, aber es werden trotzdem alle „Events“ in den Bericht geschrieben.

Wie kann ich die Abhängigkeit zu dem Attribut „Index“ des DataSets „ListOfEvents“ angeben?

Danke im Voraus für Eure Hilfe!

3.825 Beiträge seit 2006
vor 9 Jahren

Hallo Luna,

bei Fragen zu Reports gibt es immer wenig Resonanz, sowas macht kein Programmierer gerne 😉

Vielleicht hilft Dir meine Vorgehensweise :

Ich drucke meine Berichte auch mit Reportviewer aus einem Dataset. Ich gestalte das Dataset immer so dass es die druckbaren Daten anzeigt, ohne dass ich Ausdrücke im Reportviewer verwenden muss.

Also z.B. lösche ich die Zeilen vorher die ich nicht drucken will.

Berechnete Spalten füge ich dem Dataset hinzu und berechne sie in C#.

Vielleicht hilft dir das.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

6.911 Beiträge seit 2009
vor 9 Jahren

Hallo Luna1987,

ergänzend zu Bernds Antwort bzw. allgemeiner: Es ist so gut wie immer besser wenn zur Anzeige - den Report zähle ich hier als Anzeige - ein eigenes ViewModel erstellt wird, indem alle benötigten Daten fix und fertig vorliegen. Dann braucht die "View" diese nur mehr stupide darstellen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"