Wie kann ich einen Parameter eines Unterberichts festlegen? Ich habe mich erfolgreich an das SubreportProcessing-Ereignis angeschlossen, ich kann den richtigen Unterbericht über e.ReportPath finden und ich kann Datenquellen über e.DataSources.Add hinzufügen. Aber ich finde keine Möglichkeit, Berichtsparameter hinzuzufügen?
Ich habe Leute gefunden, die vorschlagen, sie dem Hauptbericht hinzuzufügen, aber ich möchte das nicht wirklich tun, da der Hauptbericht überhaupt nicht mit dem Unterbericht verbunden sein sollte, außer dass es wickelt den Unterbericht ein.
Ich verwende einen Bericht als Vorlage, drucke den Namen des Berichts, Seitenzahlen usw. Und der Unterbericht wird der Bericht selbst sein. Und wenn ich nur einen Weg finden könnte, diese Berichtsparameter des Unterberichts zu setzen, wäre es gut zu gehen ...
Erläuterung: Das Erstellen / Definieren der Parameter ist nicht das Problem. Das Problem besteht darin, ihre Werte festzulegen. Ich dachte, es wäre ganz einfach, dies im SubreportProcessing-Event zu tun. Und die SubreportProcessingEventArgs haben tatsächlich eine Parameter-Eigenschaft. Aber es ist nur lesbar! Wie benutzt du das? Wie kann ich ihren Wert einstellen?
Nachdem ich mich angeschaut und gesucht habe, bin ich zu dem Schluss gekommen, dass das Einstellen der Parameter eines Unterberichts im Code nicht möglich ist. Wenn Sie nicht etwas Besonderes machen, beginnen Sie mit dem Bearbeiten der XML-Datei der Berichtsdefinition, bevor Sie sie laden oder ähnliches.
(Aber wenn jemand anderes wissen sollte, dass ich falsch liege, bitte antworte, denn ich bin immer noch sehr neugierig darauf!)
Es funktioniert, aber es ist sicher persnickety.
Als erstes empfehle ich, Ihre Berichte als .rdl zu entwickeln. Viel einfacher, die Berichte auf diese Weise zu testen. Sie können die Unterberichtsparameter auch als rdl einrichten und testen, wobei Sie sicherstellen, dass jeder Parameter des Unterberichts auch als Parameter des übergeordneten Berichts definiert ist. Sobald Sie die Berichte - einschließlich der Unterberichte - auf diese Weise erhalten haben, können Sie die .rdl-Datei in rdlc umbenennen und die rdlc-Dateien zu Ihrem ReportViewer-Projekt hinzufügen. Keine weiteren Änderungen erforderlich. Verwenden Sie die Namen der rdl-Datenquellen als Datenquellennamen in Ihrem Code, um dem Bericht im SubreportProcessing-Ereignishandler Daten bereitzustellen.
Sie weisen dem übergebenen Parameter keine Werte zu. Der Unterbericht verwendet sie wie sie sind. (Klingt wie der Schritt, den Sie vermissen, die Parameter dem übergeordneten Bericht sowie dem Unterbericht wie oben erwähnt hinzuzufügen.) Sie können die Parameter auswerten und sie als Abfrageparameter verwenden, um die Datenquelle abzurufen, die Sie hinzufügen. Sie müssen über die Datenquelle nachdenken wie auf einer unentdeckten Dimension für einen Unterbericht. Sie müssen beim Debuggen im Event-Handler herumstöbern, um zu sehen, was ich meine. Einige der Werte in Ihrer Anwendung werden leicht verfügbar sein, andere, die Sie leicht anderswo verwenden, werden Objekt nicht gefundene Ausnahmen auslösen. Zum Beispiel erstelle ich ein Dataset in einer Instanz einer Klasse, die auf dem Hauptformular meiner Anwendung erstellt wurde. Ich verwende den Datensatz in meiner gesamten Anwendung. Im SubreportProcessing-Ereignishandler kann ich das allgemeine Dataset nicht verwenden. Daher muss ich eine neue Instanz der Tabelle erstellen, die ich für den Bericht benötige, und sie auffüllen. Im Hauptbericht könnte ich auf den gemeinsamen Datensatz zugreifen. Es gibt andere Einschränkungen wie diese. Wage dich einfach durch.
Hier ist der SubreportProcessing-Event-Handler einer funktionierenden VB.NET ReportViewer-Anwendung. Zeigt einige verschiedene Möglichkeiten zum Abrufen der Datenquelle für einen Unterbericht. Unterbericht1 erstellt eine Ein-Zeilen-Datentabelle aus Anwendungsgeschäftsobjekten, Unterbericht2 stellt Daten bereit, die der Bericht ohne Parameter benötigt, Unterbericht3 ist Unterbericht2, wertet jedoch einen der an den Unterbericht übergebenen Parameter zur Verwendung in Datumswert aus, der von der Abfrage benötigt wird, die ReportDataSource erstellt.
%Vor%Kürzlich hatte ich das gleiche Problem und bei der ganzen Suche habe ich nichts hilfreiches gefunden, aber letztendlich habe ich eine Lösung dafür gefunden.
Ich habe eine Klasse mit allen Parametern im Unterbericht als Eigenschaften erstellt (wir können es als DTO bezeichnen)
%Vor%Dann wurde eine Liste dieses Typs als eine andere Datenquelle im Hauptbericht verwendet und dann in 'Unterberichteigenschaften' ein Parameter für jeden Parameter im tatsächlichen Unterbericht hinzugefügt und die entsprechenden Felder aus der Datenquelle als deren Werte ausgewählt.
Wenn Sie den Bericht laden, konvertieren Sie die Eingabe (Liste der Mitarbeiter) in eine Liste von MyDto und legen Sie sie als Datenquelle des Berichts fest:
%Vor%Und ...
Es hat den Trick für mich gemacht :) Ich hoffe, es hilft jemandem.
Ich hatte ein ähnliches Problem, indem ich einen Properties.Settings .... -Wert übergeben musste, um den Pfad in der Datenbank voranzustellen. Um dies zu tun, musste ich eine Eigenschaft im Hauptbericht festlegen und diese Eigenschaft verwenden, um die zweite Eigenschaft im Unterbericht festzulegen. Durch das Festlegen der Haupteigenschaft wird dann wiederum die Eigenschaft subreport festgelegt. Sie können die Haupteigenschaft im Code wie folgt festlegen:
Angenommen, Sie haben einen ReportViewer-Namen rv, dann würden wir codieren:
%Vor%Ich weiß, dass dies eine alte Frage ist, die als beantwortet markiert wurde, aber da ich heute nur nach diesem gesucht habe und ich sah, dass es in den letzten Monaten kommentiert wurde, dachte ich, ich würde eine Antwort folgen lassen in.
Um den Unterbericht im Kontext jedes Datensatzes im Hauptbericht darzustellen, müssen Sie SubreportProcessingEventHandler
deklarieren und dann innerhalb dieses Handlers das DataSet für jede Instanz des Unterberichts beim Auftreten laden. SubreportProcessingEventArgs
verfügt über eine Parametersammlung, die beim Auslösen des Ereignisses vom übergeordneten Bericht übergeben wird.
Wenn Sie also die Unterberichtsparameter im Hauptbericht mit gleichnamigen Parametern konfiguriert haben, die an Felder im Hauptbericht gebunden sind, können Sie auf die Werte zugreifen, wenn der Unterbericht gerendert wird.
Hier ist eine sehr gute Beschreibung Das erklärt viel klarer.
Sie können sie über die XML-Definition hinzufügen. Ich verwende XML, um basierend auf ausgewählten Unterberichten und anderen Optionen einen vollständigen Bericht zu erstellen. Ich kann etwas Code hier einfügen Montag kommen, wenn Sie dies als eine mögliche Lösung betrachten möchten.
Bearbeiten: Sie können Werte für den Unterbericht im XML festlegen, bevor Sie den Bericht bereitstellen. Das ist nicht sehr flexibel und ich gehe davon aus, dass Sie, wenn Sie nach diesen Werten fragen möchten, diese höchstwahrscheinlich im übergeordneten Bericht benötigen.
Wenn Sie sehen möchten, wie die XML-Datei aussieht, fügen Sie einen Unterbericht hinzu und geben Sie Werte in den Unterberichteigenschaften & gt; Parameter, dann machen Sie einen View-Code.
%Vor%Anstatt die = Parameter! StartDate.Value zu verwenden, würde ich vermuten, dass Sie einen tatsächlichen Wert wie am EndDate eingeben möchten.
Svish - Ich bin mir nicht sicher, auf welcher Seite der Leitungen Sie Probleme haben.
Um dem übergeordneten Bericht Parameter hinzuzufügen, öffnen Sie ihn, klicken Sie dann mit der rechten Maustaste auf den Unterbericht und wählen Sie Eigenschaften & gt; Parameter.
Sie können dann Parameternamen definieren und ihnen einen Wert zuweisen, z. B.
%Vor%Auf dieser Seite der Installation erhalten die Parameter ihren Wert aus der Datenquelle des übergeordneten Berichts.
Um einem Unterbericht Parameter hinzuzufügen, öffnen Sie den Unterbericht und wählen Sie in der Symbolleiste Bericht & gt; Berichtsparameter
Hier definieren Sie einen Parameter zum Empfangen des Parameters aus dem übergeordneten Bericht, z. B.
%Vor%Für was es klingt wie Sie wollen, können Sie nicht einen Unterbericht abschaffen und nur den einen Bericht haben? Die Informationen, die Sie um den Bericht zu wickeln versuchen, sind ideal für die Aufnahme in die Kopf- und Fußzeilen des Berichts.
Tags und Links c# reporting parameters reporting-services subreport