Czy jest jakiś graficzny interface, który zastąpiłby domyślnie tą stronę z linkami do raportów.
No, ta strona to jest właśnie standardowy, graficzny interfejs.
Jak integrować raporty z aplikacją np. w MVC ASP.NET?
Kilka lat temu rozwiązywałem ten problem i użyłem po prostu kontrolki ReportViewer
(z WebFormsów!) osadzonej na stronie ASP.NET MVC. Nie jest to specjalnie intuicyjne, więc wklejam swoje skrawki kodu.
-
W kontrolerze po prostu mam: return View();
.
-
W cshtml mam takie coś:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
@ViewBag.ReportDisplayName</h2>
<iframe name="ReportIFrame" scrolling="no" id="ReportIFrameID" width="100%" height="800px"
frameborder="0" src="@(Url.Content("~/WebPages/ReportHost.aspx") + "?ReportName=" + ViewBag.ReportName)" >
</iframe>
- W
ReportHost.aspx
:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportHost.aspx.cs" Inherits="SuperProject.WebPages.ReportHost" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="740" Height="750"
BackColor="White" >
</rsweb:ReportViewer>
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</form>
</body>
</html>
- W code behind:
public partial class ReportHost : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string reportName = this.Request["ReportName"];
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerUrl = new Uri(@"http://localhost/ReportServer");
ReportViewer1.ServerReport.ReportPath = string.Format(@"/SuperProjectReports/{0}", reportName);
}
}
}
-
W RegisterRoutes
: routes.IgnoreRoute("WebPages/ReportHost.aspx");
.
-
W web.config
a) w system.web
dwie nowe gałęzie:
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
validate="false" />
</httpHandlers>
<buildProviders>
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</buildProviders>
b) w system.webServer
:
<handlers>
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
To chyba tyle.
P.S. To nie jest temat stricte bazodanowy, przenoszę do .NET.