2016-12-20 4 views
0

Ich bin eine RDLC-Datei, die von einer Drittpartei erstellt wird, eine Problembehandlung. Sie haben einen VB.NET-Code im Bericht und ein Ausdruck in der Detailzeile ruft eine Funktion auf, die durch den Code definiert wird. Die Funktion gibt keine Daten zurück; Es füllt nur ein Array. Es gibt nichts anderes in der Detailzeile und die Zeile selbst ist ausgeblendet.Verwenden Sie Code in einer versteckten Detailzeile von RDLC

In der Fußzeile einer Zusammenfassungsgruppe gibt es zwei weitere Ausdrücke, die Funktionen aufrufen, die das von der ersten Funktion aufgefüllte Array verwenden. Wenn die Detailzeile sichtbar ist, funktionieren diese Funktionen einwandfrei. Wenn die Detailzeile ausgeblendet ist, geben die Ausdrücke #Error zurück. Es scheint nicht die Funktion aufzurufen, und das Array bleibt leer.

Ich habe die Detailzeile so klein wie möglich gemacht, aber es werden einige Zeilen zurückgegeben, so dass ich ziemlich viel Leerraum bekomme. Gibt es eine Möglichkeit, die Detailzeile auszublenden und trotzdem die Funktion aus dem Berichtscode aufzurufen?

Ich fand die folgende Frage, die schien, was ich suchte, aber ich glaube nicht, dass die Befragten die Frage verstanden.

Hide a row in RDLC report without disabling the code execution

I 2013 Visual Studio bin mit schätze ich irgendwelche Vorschläge. Vielen Dank.

EDIT:

Hier ist der Bericht-Code Abschnitt, wenn es die Situation hilft zu klären.

public dim TranDate(0) as DateTime 
public dim CashFlow(0) as Double 
public dim BFCashFlow(0) as Double 

public dim RowCount as Int32=0 

Public Function PrepairCashFlowArray(byval myTrandate as Date,ByVal myCashFlow as Double,ByVal myBFCashFlow as Double) 

Redim Preserve TranDate(RowCount) 
Redim Preserve CashFlow(RowCount) 
Redim Preserve BFCashFlow(RowCount) 

TranDate(RowCount)=myTrandate 
CashFlow(RowCount)=myCashFlow 
BFCashFlow(RowCount)=myBFCashFlow 

RowCount =RowCount +1 

End Function 

Public Function GetNETIRR() as Double 

Return ((IRR(CashFlow, -0.1)+1)^4-1) * 100 

End Function 

Public Function GetGROSSIRR() as Double 

Return ((IRR(BFCashFlow, -0.1)+1)^4-1) * 100 

End Function 

Hier ist der detaillierte Zeilenausdruck.

=code.PrepairCashFlowArray(Fields!perfdate.Value,Fields!cashflow.Value,Fields!bfcashflow.Value)

Hier ist einer der beiden Zusammenfassungszeile Ausdrücke (sie sind ähnlich).

="Net of Fee IRR: ="&format(code.GetNETIRR(),"##,#0.#0")

+1

Ich bin verwirrt. Wenn Sie die Detailzeilen ausblenden möchten, warum würden Sie nicht einfach eine Abfrage erstellen, die Ihnen die Zusammenfassungswerte liefert und den VBA-Code überspringt? – SMM

+0

Da die IRR-Funktion ein Array als erstes Argument benötigt. –

Antwort

1

Es gibt keine saubere Lösung für dieses Problem, weil nicht oder nicht Auswerten von Ausdrücken oder Code in versteckten Objekten Ausführen eine Funktion seit Version 2008 ist. In den Tagen von SSRS und reportviewer 2005 konnte man die Ausführung von Code in ein verstecktes Objekt setzen und die Auswertung oder Ausführung würde normalerweise passieren, aber dann beschlossen sie, es zu ändern.

Es ist ein Hack, aber Sie können eine andere Funktion machen, die die gleichen Parameter wie PrepairCashFlowArray und vielleicht einen weiteren Parameter haben, den Sie verwenden würden, um Hidden-Eigenschaft zu aktivieren, wenn Sie sie brauchen. So könnte man so etwas wie:

Function HidProp(byval myTrandate as Date,ByVal myCashFlow as Double,ByVal myBFCashFlow as Double, byval hide as Boolean) 
    If hide Then ...call PrepareCashFlowArray with same parameters... 
    Return hide 
End Function 

So können Sie Hidden-Eigenschaft auf Details Zeile Code.HidProp gesetzt (all_params, verbergen: True). Ich habe nicht gesehen, dass Sie gesagt haben, dass es eine Bedingung gibt, mit der Sie versteckte Eigenschaft auf Details Zeile setzen, aber dieser zusätzliche Parameter gibt Ihnen die Möglichkeit, Ihre Funktion nicht aufzurufen, wenn Sie Anrufe in der Detailzeile oder Sie verlassen möchten kann den Aufruf von Details löschen und HidProp immer von versteckter Eigenschaft aufrufen, dann können Sie Ihre Funktion ohne Wenn-dann-sonst aufrufen.

Auf diese Weise können Sie erzwingen, dass der Bericht den Code für jede Detailzeile auswertet.

fand ich eine Antwort dazu auf MS verbinden, so vielleicht diese Hinweise können Sie auch helfen: https://connect.microsoft.com/SQLServer/feedback/details/354787/reporting-services-rc0-hidden-code-not-executing

+0

Vielen Dank für diese Antwort. Letztendlich entschied mein Kunde, auf diesen Teil des Berichts zu verzichten, aber wenn wir weiter gegangen wären, hätte ich mich wahrscheinlich für eine SQL-basierte Lösung entschieden. Aber ich kann später darauf zurückkommen und sehen, wie es funktioniert. –

Verwandte Themen