2016-04-18 2 views
0

Я хочу, чтобы в моем основном отчете был создан подчиненный отчет, но что-то не так с моим набором данных в подзаголовке. Действие моего основного доклада.Подзаголовок с Reportviewer не работает

public ActionResult ExibirRelatorioProgramaSol(FormCollection form) 
    { 
     DateTime dtInicial = DateTime.Parse(form["dt_inicio"]); 
     DateTime dtFinal = DateTime.Parse(form["dt_fim"]); 
     int idLista = form["ddl_Lista"].ConvertValueForm<int>(); 
     var avaliacao = _appServicoAvaliacaoSetor.ObterAvaliacoes(dtInicial, dtFinal, idLista); 
     var relatorio = _appServicoAvaliacaoSetor.GerarRelatorioProgramaSol(dtInicial, dtFinal, idLista); 

     var viewer = new Microsoft.Reporting.WebForms.ReportViewer(); 
     viewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local; 
     viewer.LocalReport.ReportPath = Request.MapPath(Request.ApplicationPath) + "/Report/ReportProgramaSol.rdlc"; 
     viewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(RenderizaSubRelatorioPedido); 
     viewer.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("ProgramaSol", relatorio.ToList())); 
     viewer.SizeToReportContent = true; 
     viewer.Width = System.Web.UI.WebControls.Unit.Percentage(100); 
     viewer.Height = System.Web.UI.WebControls.Unit.Percentage(100); 

     ViewBag.ReportViewer = viewer; 

     return View(); 
    } 

Действие моего подотчетом:

private void RenderizaSubRelatorioPedido(object sender, SubreportProcessingEventArgs e) 
    { 
     int idEmpresa = Convert.ToInt32("2"); 

     e.DataSources.Add(new ReportDataSource("empresa", 
         _appServicoEmpresa.ObterEntidadePor(i => i.Id == idEmpresa))); 
    } 

Ошибка:

Failure data recovery for the sub- report ' subreport1 ' , located at: C : \ Projects \ Samich \ VisualStudioOnLine \ Vanessa \ Samich Projects C# \ EMS - Audit Management System - Copy \ EMS - Audit Management System \ Report \ ReportHeader.rdlc . Check the log files for more information .

Может кто-нибудь мне помочь?

+0

А вложенные вложения ... они дают так мало с точки зрения полезных сообщений об ошибках. Одна вещь, которую я сделал, - начать с абсолютно чистого суб-отчета (например, нет источников данных/параметров или чего-то еще), а затем медленно ... ОЧЕНЬ МЕДЛЕННО ... добавьте разные фрагменты. Начните с параметров ... вам нужно связать их с дизайнером, и они, скорее всего, придут из внешнего отчета. Затем добавьте источник данных. Посмотри, что умирает и уходит оттуда. – BlackjacketMack

+0

Я пробовал все, но ничего не работает. Мне действительно нужна помощь. знак равно –

ответ

0

У меня такая же проблема, как и выше - вот то, что я пытался до сих пор

Существующее приложение для Windows (который я мигрируют в MVC) имеет RDLC отчеты, которые делают OK в элементе управления Windows, Report Viewer.

Портирование кода на MVC имеет проблемы с подобъектом, как указано выше. Невозможно найти какие-либо журналы или другие указатели на эту проблему, просто сообщение о неспособности отобразить дополнительный отчет.

Я использую следующий телезрителя

данные
@using ReportViewerForMvc; 

Суб-отчет добавляется в случае обработки

rpt.SubreportProcessing += LocalReport_SubreportProcessing; 

В версии MVC, выше событие не вызывается в контроллере ,

В другой попытке решить эту проблему я переместил C# в кодовый блок на странице CSHTML и завернул событие и другие методы в делегатах и ​​блоках действий, но получал ту же проблему.

rpt.SubreportProcessing += (object sender, SubreportProcessingEventArgs e) => 
    { 
... 

Я не знаю, где процесс отчета работает, но ни один из обработчиков событий элементов управления когда-либо называют ни в одном из контроллера или CSHTML коды.

Если визуализировать отчет в формате PDF в контроллере вместо возврата в представлении, отчет создается правильно, а в браузере отображается PDF-файл.

Warning[] warnings; 
    string mimeType; 
    string[] streamids; 
    string encoding; 
    string filenameExtension;   

    var bytes = rpt.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings); 

    return new System.Web.Mvc.FileContentResult(bytes, mimeType); 

Я также создал отдельную страницу APSX работает один и тот же код, что и версии Windows, которая вызывает обработчики событий суб-отчетов и, как представляется, имеют все необходимые данные обрабатываются. Однако отчет не отображается в средстве просмотра отчетов (несмотря на то, что он говорит, что есть одна страница). На странице дизайнера ASPX, элемент управления имеет сообщение об ошибке, говорящее, что не может быть создан (и там нет управления для просмотра отчетов в панели инструментов)

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

<%@ 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"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
      <Scripts> 
       <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" /> 
      </Scripts>     
     </asp:ScriptManager> 
     <div style="height: 600px; width: 900px; border: 1px solid silver;"> 
      <rsweb:ReportViewer ID="rv" runat="server" Height="600" Width="900" AsyncRendering="false"></rsweb:ReportViewer> 
     </div> 
    </form> 
</body> 
</html> 

До сих пор то, не повезло

Я замечаю, что когда страница MVC отображается, отчет сразу не загружается.Кажется, что он ждет по таймеру и через несколько секунд отображает значок «Занят» и продолжает обрабатывать отчет (минус вспомогательные отчеты).

. . .

. Дайте этот другой вид, но, возможно, придется идти другим путем, если я не могу получить успех

0

Решение Найдено

ASPX форма "ReportViewerWebForm.aspx" добавляется к проекту NuGet. Это вызывается из представления MVC для рендеринга отчета. Редактирование этой страницы позволяет вызывать процесс суб-отчета.

ReportViewerWebForm.aspx не имеет страницы с кодом, но наследует от класса «ReportViewerForMvc.ReportViewerWebForm», который работает за кулисами.

Я добавил файл класса страницы «ReportViewerWebForm.aspx.cs» (и файл-конструктор «ReportViewerWebForm.aspx.designer.cs» для полноты) и изменил страницу ASPX, чтобы наследовать класс кода.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportViewerWebForm.aspx.cs" Inherits="YourNamespace.ReportViewerWebForm" %> 

Я обновил код-за так, что класс страницы наследует от «ReportViewerForMvc.ReportViewerWebForm» и создали переопределение для On_Load проволоки до события обработки суб-отчета. В этот обработчик событий, где данные добавлены в подотчет

using Microsoft.Reporting.WebForms; 
namespace YourNamespace 
{ 
    public partial class ReportViewerWebForm : ReportViewerForMvc.ReportViewerWebForm 
    { 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      ReportViewer1.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing; 
     } 


     private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) 
     { 
      ReportDataSource rds = new ReportDataSource("SubReport_DatasetName_Here", yourData); 
      e.DataSources.Add(rds); 
     } 
    } 
} 

Это прекрасно работает, если у вас есть только один отчет, но для того, чтобы поддерживать несколько отчетов, вам необходимо знать, какие данные для подачи в каждый случай. В краткосрочной перспективе я установлю уникальное имя в «Reportviewer1.LocalReport.DisplayName», так как у меня есть только несколько отчетов для поддержки.

Смежные вопросы