Comment puis-je utiliser RDLC rapports avec le Contrôle ReportViewer dans ASP.Net MVC?
Je suis assez nouveau à l'ASP.Net MVC. J'ai une exigence de montrer un RDLC rapport basé sur MVC.
Fondamentalement, mon exigence ainsi que ce que j'ai fait est la suivante :-
J'ai un ReportController hériter APIController, qui a une méthode qui retourne un DataSet. Ce jeu de données est envoyé à la RDLC fichier.
Pour cela, j'ai fait ce qui suit, mais ne pouvait pas faire le rapport de travail.
J'ai créé un modèle de classe nommée ReportParameter comme suit:
public class ReportParameter
{
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
}
J'ai le contrôleur suivant ReportViewController :
public class ReportViewController : Controller
{
static readonly ReportController ctrl = new ReportController();
public ActionResult GenerateReport()
{
return View();
}
[HttpPost]
public ActionResult GenerateReport(ReportParameterSalesOrder param)
{
if (ModelState.IsValid)
{
Helpers.DataLayer dl = new Helpers.DataLayer();
if (param.DateFrom != null)
{
DateTime DateFrom = Convert.ToDateTime(param.DateFrom);
DateTime DateTo = Convert.ToDateTime(param.DateTo);
string fdate = DateFrom.ToString("yyyy/MM/dd");
string tdate = DateTo.ToString("yyyy/MM/dd");
Session["ReportSales"] = ctrl.ReportSales(param);
}
return Redirect(Url.Action("ViewReport", "ReportView"));
}
return View();
}
public ActionResult ViewReport()
{
return View();
}
}
J'ai une API Contrôleur ReportController dont l'objet a été créé dans le ci-dessus ReportViewerController générer un ensemble de données et pour remplir les rapports RDLC. L'API Contrôleur est:
public class ReportController : ApiController
{
static readonly IReportRepository repository = new ReportRepository();
[ActionName("ReportSales")]
public DataSet ReportSales(ReportParameterSalesOrder paramSO)
{
DataSet item = repository.ReportSales(paramSO);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
}
J'ai deux points de vue GenerateReport.aspx et ViewReport.aspx. Le GenerateReport.aspx est donnée ci-dessous:
<table style="width: 40%;">
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label1" runat="server" Text="From Date"></asp:Label></h3>
</td>
<td>
<%=@Html.EditorFor(a=> a.DateFrom, new{id="startDate",style="width:250px;"}) %>
<%=@Html.ValidationMessageFor(a => a.DateFrom)%>
</td>
</tr>
<tr>
<td class="style1">
<h3>
<asp:Label ID="Label2" runat="server" Text="To Date"></asp:Label></h3>
</td>
<td>
<%=@Html.EditorFor(a => a.DateTo, new { id = "ToDate", style = "width: 250px;" })%>
<%=@Html.ValidationMessageFor(a => a.DateTo)%>
</td>
</tr>
<tr>
<td class="style1">
</td>
<td>
</td>
</tr>
<tr>
<td class="style1">
</td>
<td>
<input id="btnsearch" class="button" type="submit" value="Show" />
</td>
</tr>
</table>
La ViewReport.aspx est donnée ci-dessous:
<center style="width: 974px">
<iframe id="myReport" width="100%" height="450px" src="ReportViewer.aspx">
</iframe></center>
J'ai ajouté un Dataset.xsd, un fichier rdlc et une page aspx pour ajouter le fichier rdlc.
Mais je ne peux pas le faire fonctionner. Comment puis-je afficher le rapport, ou comment dois-je remplir le dataset que je reçois de la manette pour le rapport ?
ViewReport.aspx
utilisé dans le iframe
aurez besoin pour être un bon vieux formulaire web avec le code derrière - comme par exemple le jeu de données dans le code-behind de ViewReport.aspx.cs
. Ce que vous pouvez probablement le faire est de passer les données à partir de la MVC Contrôleur via le Session[]
variable?Le ViewReport.aspx ne dispose pas d'un fichier code-behind. Pouvez-vous expliquer un peu plus ?
OriginalL'auteur Nubicus | 2015-01-01
Vous devez vous connecter pour publier un commentaire.
Fond
(Je sais que vous connaissez, mais pour les futurs lecteurs 😉
Session
état est partagé entre MVC et web forms.En Détail
Le
ViewReport.aspx
page utilisée pour rendre le contrôle ReportViewer dans leiframe
sur le MVC Vue devra être un bon vieux asp.Net formulaire web.Pour de petits ensembles de données, vous pouvez récupérer les données du rapport dans le MVC Contrôleur et la passer dans
Session
à travers le Formulaire en ligne.Toutefois, pour les grands ensembles de données, je vous recommande plutôt de passer les Paramètres à travers le Formulaire en ligne dans la Session (ou même via le
QueryString
, si elles ne sont pas sensibles), et ensuite le Formulaire de code derrière aurait besoin de récupérer l'ensemble des données et le lier à la ReportViewer.Sur le MVC Côté, dans le
MyController
paramètre poste:Vous pouvez afficher l'IFrame une fois le ReportParameters ont été tapé par l'utilisateur, sur la Vue,
MyController/GenerateReport
:Puis ajouter un WebForms page
/OldSkoolAspx/ReportViewer.aspx
pour votre projet MVC. Dans le code-behind deReportViewer.aspx.cs
:Et dans les Formulaires
ReportViewer.aspx
avant la fin, ajouter le contrôle (il est recommandé d'utiliser la boîte à outils, l'ensemble des références sont ajoutées pour le web.config):Il y a beaucoup de pièces en mouvement ici, donc j'ai téléchargé un projet de démonstration à GitHub ici
Noter que la même technique fonctionnera aussi pour les Rapports générés par le Serveur de rapports (c'est à dire à l'aide de ReportViewer .Des rapports RDL). Toutefois, méfiez-vous que les deux RDLC et RDL peut être réel
SessionState
porcsSalut, mais le truc, c'est quand mon rapport de charges les autres fonctionnalités sont bloquées même j'ai essayé asnycrender à vrai bt tous les functionalites travail seulement après le rapport est complètement chargé aucune idée pour qui?
L'homme,il m'a aidé plus d'une fois. 🙂
OriginalL'auteur StuartLC