Кнопки CrystalReportViewer, Поврежденные с помощью Платформы MVC

Во-первых, перезапустите Visual Studio, очистки и сборки решения в большинстве случаев недостаточно.

Попробуйте выгрузить проект в Visual Studio и отредактируйте файл csproj. Найдите ссылку на этот реквизит в файле. Иногда дублируется текущая версия и одна устаревшая версия. Удалите старый и перезагрузите проект.

Проверьте в своих формах Android / iOS, если csproj ссылается на ту же версию Xamarin.Forms и не содержит странных линий / символов.

<PackageReference Include="Xamarin.Forms" Version="x.x.x.xxxxx" />

В крайнем случае, попробуйте понизить версию XamarinForms и проверить, помогает ли она.

5
задан ben 30 September 2008 в 19:57
поделиться

2 ответа

Мы смогли заставить средство просмотра отчета работать и использовали его в течение прошлых нескольких месяцев в производстве без любых проблем.

  • У нас есть контроллер отчетов, который перечисляет ссылки на отчеты, которые мы хотим выполнить
  • Нажатие на одну из ссылок выполнит ajax вызов к бэкэнду и возвратит частичную страницу, где мы можем заполнить все параметры, нам нужно.
  • После того, как параметры заполнены, мы отправляем форму '\reports\Name Отчета'.
  • Назад в контроллере Отчетов мы называем SQL, возвращаем наши данные и затем называем другое представление под названием 'Полный отчет'
  • Представление 'Полного отчета' только имеет кристаллический контроль средством просмотра отчета на нем, где это автоматически берет данные отчета, мы передаем к нему через ViewData, заполняет отчет, представляет его и отправляет его пользователю

Все, кажется, работает отлично.

ОБНОВЛЕНИЕ

Я добавил некоторый код и разъяснение к шагам, которые я первоначально упомянул выше. Ключевой объект, который я не учел, был существует некоторый код позади с заключительным Представлением, таким образом, это будет работать с Crystal Reports. Код позади минимален, но необходимый. Чтобы Crystal Reports работал, Вы собираетесь закончить со следующими файлами:

  • Расположение file.rpt, где Вы разрабатываете отчет
  • aspx файл, который содержит управление Отчетом Crystal Reports. Это - файл, который будет иметь некоторый код позади.

Детали о том, как создать Представление, которое будет работать с Crystal Reports:

  • Создайте расположение своего отчета с помощью Разработчика Crystal Reports. Получающийся файл будет .rpt файлом. Ради этого примера давайте назовем этот файл AllJobsSummaryReportLayout.rpt.
  • В то время как разработка Вашего отчета, для 'Полей Базы данных' выбирает одно из предприятий или DTOs, который содержит результаты, возвращающиеся из SQL.
  • Быстрое в стороне, у нас есть несколько объектов передачи данных (DTOs) в нашей системе, которые содержат не что иное как скалярные величины и строки, в этих DTOs нет никакой аналитики. Когда Контроллер называют, он называет Модель, Модель для большинства этих отчетов возвращает Список DTOs, который мы затем передаем Представлению, которое будет представлено. Эти DTOs не знают, как запросить себя, отобразить себя, они только содержат фактические значения, возвращенные от SQL, который кто-то еще затем представляет.
  • После того как файл Отчета о Кристалле расположения завершается, AllJobsSummaryReportLayout.rpt, мы разрабатываем наш Контроллер. В Контроллере мы берем в любых параметрах, должен был выполнить отчет, назвать Модель, Модель возвращает наш список DTOs, как замечено в отрывке ниже от Контроллера:

    var reportViewData = model.AllJobsSummaryQuery(startDate, endDate);
    if (0 != reportViewData.Count())
    {
        var report = new AllJobsSummaryReportLayout();
        report.SetDataSource(reportViewData);
        report.SetParameterValue("startDate", startDate);
        report.SetParameterValue("endDate", endDate);
        ViewData["ReportData"] = report;
        returnView = "AllJobsSummaryView";
    }
    else
        returnView = "noReportView";
    return View(returnView);
    
  • Отметьте несколько объектов здесь, мы создаем varible 'отчет', который является типом Кристаллического файла расположения Отчета, AllJobsSummaryReportLayout.rpt, который мы создали выше.

  • После того как мы создали переменную 'отчета', мы устанавливаем значения источника данных и любые параметры, в которых мы нуждаемся и связываем объект в ViewData.

  • Теперь давайте смотреть на AllJobsSummaryView.aspx. Этот файл имеет форму на нем со Средством просмотра Crystal Reports и кодом позади файла:

<%@ Page Title="All Jobs Summary Report" Language="C#" AutoEventWireup="true" CodeBehind="AllJobsSummaryView.aspx.cs" Inherits="V.Views.Reports.AllJobsSummaryView"%>     
<%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %> 
<form id="form1" runat="server">
<div>
<a href="/Reports" id="Report"><< Return to Report Main
    Page</a><br />
<CR:CrystalReportViewer ID="ReportViewer" runat="server" AutoDataBind="True" EnableDatabaseLogonPrompt="False"
    EnableParameterPrompt="False" HasCrystalLogo="False" DisplayGroupTree="False" 
    HasDrillUpButton="False" HasToggleGroupTreeButton="False" HasViewList="False" 
    HasSearchButton="False" EnableDrillDown="False" EnableViewState="True" 
    Height="50px" ReportSourceID="CrystalReportSource1" Width="350px" />    
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
    <Report FileName="AllJobsSummaryReportLayout.rpt">
    </Report>
</CR:CrystalReportSource>
</div>
</form>
  • И код позади файла:

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Web;
     using System.Web.Mvc;
    
     namespace V.Views.Reports
     {
        public partial class AllJobsSummaryView : ViewPage
        {
            protected void Page_Init(object sender, EventArgs e)
            {
                ReportViewer.ReportSource = ViewData["ReportData"];
            }
    
            protected void Page_Unload(object sender, EventArgs e)
            {
                ((AllJobsSummaryReportLayout)ViewData["ReportData"]).Close();
                ((AllJobsSummaryReportLayout)ViewData["ReportData"]).Dispose();
            }
        }
     }
    
  • Page_Unload является ключевым, без него Вам генерирует ошибку Crystal Reports, 'Вы превысили макс. количество отчетов, установленных Вашим администратором'.

Этот метод все еще работает в продуктивной среде в течение хорошо более чем двух лет теперь.

3
ответ дан 14 December 2019 в 13:51
поделиться

Если это будет управлением сервером, то оно не будет работать. ASP.NET MVC не использует обратных передач, так большая часть управления сервером веб-форм, не функционирует.

То, что можно сделать, встраивают средство просмотра отчета в iFrame и производят это в представлении MVC. iframe может указать на страницу за пределами материала MVC, сказать в подпапке под названием Наследие или что-то.

3
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: