Поскольку Crystal Report является серверным элементом управления, нам нужна веб-страница / usercontrol для отображения отчета.И никогда не помещайте этот webform / пользовательский элемент управления в папку представлений в mvc, вы получите сломанные кнопки с 404 в CrViewer.Вы также можете использовать Iframe в виде бритвы для отображения отчета.Ниже приводится рабочая модель [VS2010], пожалуйста, пройдите.
Шаг 1: Настройка Crystal Report 1. Создайте папку верхнего уровня в корневом каталоге сайта.2. Поместите файл Crystal report.rpt в эту папку3. Добавьте веб-страницу (.aspx) в эту папку.Эта страница служит страницей просмотра отчетов.Добавьте элемент управления CrystalReportViewer на этой странице.
div align="center" style="width:100%; height:100%;"
CR:CrystalReportViewer ID="crViewer" runat="server" AutoDataBind="true"
div
4.После регистрации сборки будет добавлено в верхней части страницы ASPX.
<%@ Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>.
Проверьте версию CrystalReportViewer.Для этого выберите «выбрать элементы» из панели инструментов на боковой панели VS.Сравните эту версию с версией CrystalDecisions.Web в верхней части страницы aspx.Если оба одинаковы, оставьте это, иначе измените версию регистрации сборки так же, как в CRViewer.
Перейти к файлу web.config в корневой папке сайта;проверьте сборки, начиная с «CrystalDecisions» под тегом.Измените их версии так же, как в версии CrystalReportViewer (здесь Version = 13.0.2000.0).
Шаг 2: Настройка контроллера, действие и просмотр 1. Добавьте новое действие в класс контроллера отчетов.2. Напишите необходимые шаги для загрузки данных из базы данных / файлов.3. Установите данные в сессию.4. Не добавляйте представление для этого действия.Вместо этого используйте метод Response.Redirect.
public class ReportController : Controller
{
public ActionResult reportView(string id)
{
Session["ReportSource"] = GetdataFromDb();
Response.Redirect("~/Reports/WebForm1.aspx");
return View();
}
}
Добавьте событие загрузки страницы на страницу .aspx.
protected void Page_Load(object sender, EventArgs e)
{
CrystalDecisions.CrystalReports.Engine.ReportDocument report =
new CrystalDecisions.CrystalReports.Engine.ReportDocument();
report.Load(Server.MapPath("~/Reports/CR_report.rpt"));
report.SetDataSource(Session["ReportSource"]);
crViewer.ReportSource =report;
}
Шаг 3: Небольшой взлом в Global.asax 1. Чтобы избежать «Состояние сеанса создало идентификатор сеанса, но не может сохранить его, поскольку ответ уже был сброшен приложением». ошибка или «вывод страницы пустого отчета» Добавьте следующий код в Global.asax.
void Session_Start(object sender, EventArgs e)
{
string sessionId = Session.SessionID;
}
Теперь вы можете вызвать действие reportView () в ReportController для отображения отчета Crystal.Хорошего дня!