I'm trying to render the report viewer programmatically within a custom Page placed in an IHttpHandler context
ReportViewer rv = new ReportViewer();
ReportDataSource rds = new ReportDataSource();
rds.Name = "Report";
rv.LocalReport.ReportPath = "Report.rdlc";
rds.Value = SomeReportObject;
rv.LocalReport.DataSources.Add(rds);
rv.LocalReport.Refresh();
ScriptManager scriptHandler = new ScriptManager();
MyPage p = new MyPage();
p.Controls.Add(scriptHandler);
p.Controls.Add(rv);
using (TextWriter myTextWriter = new StringWriter())
{
using (HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter))
{
p.RenderControl(myWriter);
}
}
Although I have the ScriptManager added to the page but the runtime complains that the ReportViewer needs one, it throws the following exception at p.RenderControl(myWriter) line
The Report Viewer Web Control requires a System.Web.UI.ScriptManager o开发者_开发问答n the web form.
And this is the MyPage Class
public class MyPage : Page
{
public override void VerifyRenderingInServerForm(Control control)
{
//Empty Method
}
public override bool EnableEventValidation
{
get { return false; }
set { /* Do nothing */}
}
}
Any help would be very appreciated. This is done on .NET 4 and I'm using ReportViewer 2010.
In my case just put the instruction
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
in the aspx form source mode and works!!
The error looks like the Form Tag is missing while doing the Rendering. The ScriptManager requires a Form Tag with runat server to perform the Task.
I would suggest to you add all your controls to the Form property of the Page. In Sequence and ScriptManager should be the first control.
I hope this helps.
精彩评论