【问题标题】:How to use ReportViewer in Sensenet如何在 Sensenet 中使用 ReportViewer
【发布时间】:2016-10-13 14:20:05
【问题描述】:

我想在呈现 ASCX 文件的参数搜索 portlet 中包含 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>

这会导致“路径中有非法字符”错误消息。

在我稍微改变了我的代码之后,我现在遇到了以下情况:

  • 当我使用 ReportViewer 控件所需的&lt;asp:Scriptmanager&gt; 标记时,我收到一条错误消息,提示每页只允许一个 ScriptManager

  • 当我使用&lt;asp:ScriptManagerProxy&gt; 标签时,我收到一条错误消息,指出

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc reporting sensenet


    【解决方案1】:

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

    根据MSDN,如果您愿意,您仍然可以使用 ScriptManagerProxy 控件添加其他脚本。或者,您可以使用 SenseNet 提供的内置 sn:ScriptRequest 控件,它有助于捆绑 - 当然,所有这些都适用于您确切知道必须添加哪些脚本的情况。

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

    (从您的问题中不清楚如果您不添加 sm 代理或任何其他标签会发生什么,因为最后两个项目符号都以“当我使用标签时...”开头 - 您在这里指的是哪个标签?)

    第一条错误消息(“路径中的非法字符”)是否仍然相关?如果是,您能否添加更多详细信息,例如来自事件查看器的堆栈跟踪?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多