2011-06-14 114 views
5

我的項目是ASP.Net 4.0框架上的WebForms,使用ReportViewer 10,使用本地處理模式呈現的本地RDLC報告。ReportViewer 2010無法評估表達式

我的問題是,我的報告中的許多表達式都沒有評估。例如,我在報告的頁腳中有一個文本框,其表達式爲=Globals!PageNumber - 但是當報告運行時,我只是在該字段中出現#Error。我收到一個類似的#Error,只是在我的一個字段上做了一個ToString - =Fields!MyBooleanField.Value.ToString()

也在我的頁腳,=DateTime.Now能工作,而=Globals!ExecutionTime不起作用。

這對我來說沒有意義 - 就好像我錯過了一個參考或其他東西。我在我的項目中引用了Microsoft.ReportViewer.Common(v10)和Microsoft.ReportViewer.WebForms(v10)。

任何人有任何建議,我失蹤了什麼,或者我如何得到這個解決?

+0

你的設置和行爲聽起來正確 - 你可以預覽在投標或報表生成器2.0的報告?這是否只發生在WebForms ReportViewer控件中? – 2011-09-24 03:34:57

回答

10

我看到三個選項:

選項1:提升沙箱權限

表達式被編譯到一個單獨的程序集中,並在權限較少的沙箱中運行。使用它來增加給沙盒的權限。您可能授予的權限集可能較小,但我們沒有花時間來解決這個問題。這將意味着報告及其引用的任何程序集都將具有提升的權限。儘管我們尚未部署到產品,但該解決方案適用於我們(MVC 3,.Net 4,VS2010,Microsoft.Reporting v10)。

localReport.SetBasePermissionsForSandboxAppDomain(
    AppDomain.CurrentDomain.PermissionSet.Copy()); 

選項2:建立在NET 3.5的框架

編譯您的項目的.Net 3.5下

方案3:legacyCasModel

添加到您的web.config :

<system.web> 
    <trust legacyCasModel="true" level="Full"/> 
</system.web> 

這可以防止您使用動態變量(在某些或所有情況下?)。特別是,因爲ViewBag是動態的,所以不能使用Asp.Net MVC 3。

更多信息

http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/be1a6149-a120-4e66-96f8-63f5c4d43c87

http://blogs.msdn.com/b/brianhartman/archive/2010/02/18/expression-evaluation-in-local-mode.aspx