2012-07-20 4 views
2

в моей MVC3 бритвой приложения я использовал следующий код для представленияпросмотра отчетов в ASP.NET MVC 3 Бритва

регулятора,
ReportViewer rv = new Microsoft.Reporting.WebForms.ReportViewer(); 
    rv.ProcessingMode = ProcessingMode.Local; 
    rv.LocalReport.ReportPath = Server.MapPath("~/Reports/TestReport.rdlc"); 
    rv.LocalReport.Refresh(); 

    byte[] streamBytes = null; 
    string mimeType = ""; 
    string encoding = ""; 
    string filenameExtension = ""; 
    string[] streamids = null; 
    Warning[] warnings = null; 

    streamBytes = rv.LocalReport.Render("RDLC", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings); 

    return File(streamBytes, mimeType, "TestReport.rdlc"); 

ASPX вид

<div> 
     <script runat="server"> 
      private void Page_Load(object sender, System.EventArgs e) 
      { 
       ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Reports/TestReport.rdlc"); 
       ReportViewer1.LocalReport.Refresh(); 
      } 
     </script> 
     <form id="Form1" runat="server" method="get" action="/Pag1/File"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server">   
     </asp:ScriptManager> 
     <rsweb:reportviewer id="ReportViewer1" runat="server" height="500" width="500" AsyncRendering="false"></rsweb:reportviewer> 
     </form>   
    </div> 

Здесь Я получил результат, который нужно открыть PDF с помощью pdfviewer. Я просто хочу display the report in viewr. Я новичок в MVC3. Если какое-либо тело знает, пожалуйста, поделитесь

Ссылка для выше кода here

+0

вы используете MVC3 Razor? так что это за aspx? вы не используете cshtml? – friend

ответ

1

Вот пример ActionMethod я использую в одном из своих сайтов для создания отчета:

public ActionResult WeeklyAisleReport(DateTime start, DateTime end) 
    { 
     var range = new DateRange(start, end); 
     var records = _repository.Select(range, ""); 
     var formattedRecords = AisleProductivityRecord.Generate(records).ToList(); 

     var localReport = new LocalReport 
     { 
      ReportPath = 
       Server.MapPath("~/Content/Reports/PTLWeeklyProductivity.rdlc") 
     }; 


     var pickRecords = new ReportDataSource("PickRecords",formattedRecords); 

     localReport.DataSources.Add(pickRecords); 


     const string ReportType = "PDF"; 
     string mimeType; 
     string encoding; 
     string fileNameExtension; 


     Warning[] warnings; 
     string[] streams; 

     //Render the report 
     byte[] renderedBytes = localReport.Render(
      ReportType, 
      null, //deviceInfo, 
      out mimeType, 
      out encoding, 
      out fileNameExtension, 
      out streams, 
      out warnings); 
     Response.AddHeader("content-disposition", 
          "attachment; filename=WeeklyAisleReport-" + start.ToString("yyyy_MM_dd") + "." + 
          fileNameExtension); 
     return File(renderedBytes, mimeType); 
    } 

Относно Представления , вы не можете использовать теги WebForms (, и т. д.) в приложении MVC. Вам нужно будет создать форму, которая отправляется в ActionMethod, который генерирует PDF.

Ваше мнение файл бритвой должен выглядеть следующим образом (используя мой метод в качестве примера):

@using (Html.BeginForm("WeeklyAisleReport", "PTL")) 
    { 
     @Html.TextBox("start") 
     @Html.TextBox("end") 
     <input type="submit" value="View Report"/> 
    } 
1

Добавить просмотра отчетов и сценариев диспетчера Yous страницы ASPX из панели инструментов.

SizeToReportContent = "true" 

Не забудьте добавить выше атрибут к вашему просмотру отчетов

Тогда ваша страница выглядит, как показано ниже

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportView.aspx.cs" Inherits="ERP.Reports.ReportView" %> 

<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 
     <rsweb:ReportViewer ID="ReportViewer1" runat="server" AsyncRendering="true" ShowPrintButton="true" Height="649px" Width="1105px" SizeToReportContent = "true"> 

    </rsweb:ReportViewer> 

    </div> 
     <script> 

     </script> 
    </form> 

</body> 
</html> 

Добавить этот код в ASPX Код Страница

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      RenderReportModels(); 
     } 
    } 
    private void RenderReportModels() 
    { 

     List<Company> comp = new List<Company>(); 
     CompanyBAL bal = new CompanyBAL(); 
     comp = bal.SampleData();//Load Data 

     // Clear out any previous data sources. 
     this.ReportViewer1.LocalReport.DataSources.Clear(); 

     // Set report mode for local processing. 
     ReportViewer1.ProcessingMode = ProcessingMode.Local; 

     // Validate report source. 
     var rptPath = Server.MapPath(@"./rdlc/MyReport.rdlc"); 

     //@"E:\ERP\Reports\rdlc\MyReport.rdlc"; 

     if (!File.Exists(rptPath)) 
      return; 

     // Set report path. 
     this.ReportViewer1.LocalReport.ReportPath = rptPath; 



     // Load the dataSource. 
     var ds1 = ReportViewer1.LocalReport.GetDataSourceNames(); 
     ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource(ds1[0], comp)); 


     // Refresh the ReportViewer. 
     ReportViewer1.LocalReport.Refresh(); 
    } 

Добавить контроллер и соответствующий вид (cshtml) добавить ниже код на странице просмотра

<div> 
<input type="submit" onclick="return ReportValidationCheck();" name="ShowReport" 
     value="Show Report" /> 
</div> 
<iframe id="ifrmReportViewer" frameborder="0" width="1000" height="800" style="overflow:hidden;" scrolling="no"></iframe> 

<script> 
    function ReportValidationCheck() { 
     var url = "../Reports/ReportView.aspx"; //your ASPX page path 
     var myframe = document.getElementById("ifrmReportViewer"); 
     if (myframe !== null) { 
      if (myframe.src) { 
       myframe.src = url; 
      } 
      else if (myframe.contentWindow !== null && myframe.contentWindow.location !== null) { 
       myframe.contentWindow.location = url; 
      } 
      else { myframe.setAttribute('src', url); } 
     } 
    return false; 
    } 
</script>