如何在Sensenet中使用ReportViewer

本文关键字:ReportViewer Sensenet | 更新日期: 2023-09-27 18:12:51

我想在参数化搜索portlet呈现ASCX文件中包含ReportViewer控件。

我把RDLC文件放在内容存储库中,它被正确地检索为二进制蒸汽

<%
....
//retrieve rdlc file 
string Path = "/Root/Global/renderers/ReportFiles/Report1.rdlc"
Node node = Node.LoadNode(Path);
var binaryData = node.GetBinary("Binary");
System.IO.Stream stream = binaryData.GetStream();
//setup report
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.LoadReportDefinition(stream);
ReportDataSource datasource = new ReportDataSource("Results", dsResults.Tables[0]);
ReportViewer1.LocalReport.DataSources.Add(datasource);
%>
<div id="rptvwr">
    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
    </asp:ScriptManagerProxy>
    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="600">
  </rsweb:ReportViewer>
</div>

这会导致'Illegal characters in path'错误消息。

在我稍微改变了一下代码之后,我现在有了以下情况:

  • 当我使用ReportViewer控件所需的<asp:Scriptmanager>标记时,我收到一个错误消息,每个页面只允许一个ScriptManager

  • 当我使用<asp:ScriptManagerProxy>标签时,我收到一个错误消息,说明

    Portlet错误:报表查看器Web控件需要Web表单上的System.Web.UI.ScriptManager。

如何在Sensenet中使用ReportViewer

页面上只能有一个ScriptManager控件,而SenseNet已经自动生成了一个,您对此无能为力。实际上,它是一个名为SNScriptManager的自定义控件(它继承自默认的scriptmanager控件),页面模板管理器将其自动放入生成的母版页中。因此,您不能在您的ascx中手动添加另一个。

根据MSDN,如果你愿意,你仍然可以使用ScriptManagerProxy控件添加额外的脚本。或者您可以使用SenseNet提供的内置的sn:ScriptRequest控件,它有助于绑定—当然,只有当您确切地知道您必须添加哪些脚本时,所有这些才适用。

也许ReportViewer控件寻找默认的脚本管理器,而不喜欢SenseNet使用的自定义(继承)脚本管理器(我希望不是这种情况)。

(从你的问题中不清楚如果你不添加sm代理或任何其他标签会发生什么,因为最后两个要点都以"当我使用标签…"开始。)-你指的是哪个标签?)

第一个错误信息('非法字符在路径')仍然相关吗?如果是,请添加更多的细节,例如从事件查看器堆栈跟踪?