Элемент управления Report Viewer Crystal Report - это серверный элемент управления, поэтому он не функционирует должным образом, когда является частью страницы просмотра MVC. Следовательно, когда я пытался распечатать или экспортировать, что вызвало обратную публикацию, я постоянно видел обновление страницы, а не печать или экспорт.
Это поведение отличается от версии 1 ASP.NET MVC, которую я использовал с Visual Studio 2008, и версии Crystal Reports, поставляемой с VS2008. В VS2010 и бета-версии Crystal Reports 2010 элемент управления Report Viewer должен находиться на простой старой странице aspx, а не на странице просмотра MVC.
Чтобы выполнить это, я предпринял следующие шаги, многие из этих шагов те же, которые я использовал ранее в связанном вопросе, но я настроил их для нового поведения, наблюдаемого в VS2010 и CrystalReports 2010: StackOverflow.com : Кнопки CrystalReportViewer не работают с использованием MVC Framework
- В моем контроллере я вызываю правильные вызовы моей модели для получения данных моего отчета,
List<JobSummaryBody> body = model.GetJobSummaryBody(jobId, startDate, endDate);
- Далее я создаю переменную для самого отчета, в данном случае:
JobSummaryByDate summary = new JobSummaryByDate();
Примечание. JobSummaryByDate - это тип данных, созданный Crystal Reports, когда я создаю свой отчет, это сгенерированный код. Думайте об этом как о всех данных, которые понадобятся вашему разработанному отчету.
- Далее я устанавливаю источник данных, данные строки для только что созданного отчета
summary.SetDataSource(body);
- Наконец, я сохраняю данные своего отчета в сеансе и делаю Response.Radirect на мою страницу aspx, которая содержит Crystal Reports Viewer
Session["ReportData"] = summary;
Response.Redirect("~/CrystalReports/JobSummaryByDateView.aspx");
Примечание. Я создал новую папку верхнего уровня в своем проекте под названием «CrystalReports», к которой можно перейти по URL.
Исходная страница для JobSummaryByDateView.asp очень удобна, добавьте Crystal Report Viewer, в этом случае я дал ей идентификатор средства просмотра отчетов:
<CR:CrystalReportViewer ID="ReportViewer" runat="server" AutoDataBind="true"
EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False"
ToolPanelView="None" HasDrilldownTabs="False" HasDrillUpButton="False"
HasSearchButton="False" HasToggleGroupTreeButton="False"
HasToggleParameterPanelButton="False" ReuseParameterValuesOnRefresh="True" />
- Наконец, в коде за страницей я установил ReportViewer.ReportSource для моих данных отчета, сгенерированных в моем контроллере:
protected void Page_Init(object sender, EventArgs e)
{
ReportViewer.ReportSource = Session["ReportData"];
}