2010-05-08 4 views
9

J'essaie de rendre le spectateur de rapport par programme dans une page personnalisée placée dans un contexte IHttpHandlercontrôle Web Microsoft ReportViewer nécessitant un ScriptManager

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); 
      } 
     } 

Bien que j'ai le ScriptManager ajouté à la page, mais le moteur d'exécution se plaint le ReportViewer en a besoin, il lève l'exception suivante sur la ligne p.RenderControl (myWriter)

Le contrôle Web Report Viewer nécessite un System.Web.UI.ScriptManager sur le formulaire Web.

Et c'est la classe MyPage

public class MyPage : Page 
{ 

    public override void VerifyRenderingInServerForm(Control control) 
    { 
     //Empty Method 
    } 

    public override bool EnableEventValidation 
    { 
     get { return false; } 
     set { /* Do nothing */} 
    } 
} 

Toute aide serait très appréciée. Ceci est fait sur .NET 4 et j'utilise ReportViewer 2010.

Répondre

2

L'erreur ressemble à la balise de formulaire est manquant tout en faisant le rendu. Le ScriptManager requiert une balise de formulaire avec le serveur runat pour effectuer la tâche.

Je vous suggérerais d'ajouter tous vos contrôles à la propriété Form de la page. Dans Sequence et ScriptManager devrait être le premier contrôle.

J'espère que cela aide.

7

Dans mon cas, vient de mettre l'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> 

en mode source de formulaire ASPX et fonctionne !!

Questions connexes