Как я могу использовать SSRS ReportViewer из VS 2008 в проекте VS2010? - PullRequest
3 голосов
/ 16 марта 2010

Я работаю над проектом ASP.NET MVC 2 / .NET 3.5, который включает отчеты SSRS 2008. После перехода на VS 2010 RC новая программа просмотра отчетов веб-форм доставила столько хлопот, что я бы хотела снова использовать старую программу просмотра отчетов из VS 2008. Теперь мне просто интересно, что было бы самым простым способом сделать это.

Средство просмотра отчетов встроено в файл ASPX Webforms, который загружается в IFrame представлением MVC. Параметры отчета в настоящее время хранятся как переменные сеанса, и из соображений безопасности я бы предпочел не изменять их для параметров HTTP POST или GET. Поэтому я не могу просто поместить средство просмотра отчетов в отдельное приложение и создать его с VS2008.

Перемещение всего проекта обратно в VS 2008 не вариант.

Итак, как мне проще всего использовать VS 2008 ReportViewer в VS 2010? Есть ли способ получить сборку из VS 2008 и использовать ее в моем проекте?

Спасибо

Адриан

Редактировать: Проблемы с версией ReportViewer для VS2010 связаны с запросами AJAX. Например, AsyncRendering = True не может загрузить отчет и с помощью элементов управления подкачкой, или кнопка перезагрузки не работает либо . Кнопка экспорта работает нормально, но это потому, что она не связана с AJAX-запросами.

Если вы знаете, как я могу это исправить, я бы предпочел оставить новый просмотрщик отчетов. Просто Я ранее спрашивал об этом на SO , на social.msdn.com и в MS Connect и пока не нашел ответа.

Ответы [ 2 ]

4 голосов
/ 30 марта 2010

У Брайана Хартмана есть блог, посвященный средству просмотра отчетов, который освещает эту тему: AsyncRendering и весь багаж с ним

Свойство AsyncRendering в элементе управления ASP.Net ReportViewer является одним из наиболее неправильно понятых свойств в ReportViewer. И это наша вина. Существует множество побочных эффектов при настройке этого свойства, которые вы не ожидаете от имени. Фактически, большую часть времени я вижу, как пользователи устанавливают это свойство, они делают это для побочных эффектов, а не для его истинного намерения. Эти побочные эффекты исчезли в Visual Studio 2010, потому что вы можете получить нужные эффекты в любом режиме. Но чтобы понять, как все изменилось, давайте сначала рассмотрим некоторую справочную информацию.

Намерение AsyncRendering

Традиционно HTML-код веб-страницы не отправляется в браузер до тех пор, пока все веб-элементы управления на странице не сгенерируют свое содержимое. Для элементов управления, таких как текстовые поля и кнопки, это имеет смысл. Но ReportViewer гораздо сложнее. Для создания HTML-кода отчета зрителю может потребоваться много времени. В большинстве случаев имеет смысл отправить оставшуюся часть страницы обратно в браузер, а затем сделать еще один запрос для асинхронного получения содержимого отчета. Это позволяет пользователю взаимодействовать с остальной частью страницы, а также видеть «индикатор загрузки», чтобы они знали, что сервер что-то делает. Это поведение по умолчанию - AsyncRendering = true.

Но есть также случаи, когда вы хотите заблокировать всю страницу, пока отчет не будет обработан. Хорошим примером является страница типа панели инструментов, которая отображает несколько небольших отчетов, возможно, каждый из которых содержит одну диаграмму или небольшую таблицу. В этом случае вы можете не захотеть, чтобы пользователь был засыпан несколькими индикаторами ожидания. Если вы знаете, что отчеты быстро обрабатываются, лучше всего заблокировать страницу на короткое время. Это намерение AsyncRendering = false.

Асинхронный режим в Visual Studio 2005 и 2008

Выбранный вами режим оказывает существенное влияние на генерируемый HTML. Элемент управления ReportViewer изначально разрабатывался задолго до появления ASP.Net AJAX. Когда вы представляете отчет синхронно, HTML-код для содержимого отчета внедряется непосредственно на всю страницу. Но при рендеринге асинхронно ReportViewer использует фрейм. Содержимое фрейма извлекается браузером отдельно от главной страницы, поэтому оно позволяет видеть главную страницу, пока отчет генерируется в отдельном запросе к веб-серверу.

Кадры являются корнем всех побочных эффектов AsyncRendering. Использование кадров приводит к следующим различиям между двумя режимами:

Карта документа видна только в асинхронном режиме, отчасти потому, что она опирается на фреймы для обработки изменения размера относительно области отчета. Поскольку отчет отображается во фрейме и не является частью страницы ASP.Net, на которой размещается средство просмотра, разработчики не имеют возможности обрабатывать события, возникающие при обработке отчета. Наиболее частая жалоба, которую мы получаем в этой области, - это невозможность обработать событие ReportError при асинхронном рендеринге. Размер кадра трудно рассчитать для зрителя, и поэтому он обычно неверен. Он основан на режиме изменения размера программы просмотра (в процентах или фиксированном размере), высоте панели инструментов и наличии параметров. Это основная причина появления чрезмерного количества полос прокрутки в средстве просмотра, особенно при использовании стандартного режима или браузеров без IE. Разработчики часто переключаются на синхронный рендеринг, чтобы облегчить это. Вместестрока, аналогичная размеру кадра, заключается в том, что свойство SizeToReportContent игнорируется в асинхронном режиме. Рамка не регулирует свой размер в зависимости от содержимого, поэтому нет простого способа показать произвольный отчет, встроенный в страницу без полос прокрутки, если вы не переключитесь в синхронный режим. Эти побочные эффекты, как правило, имеют более высокий рейтинг с точки зрения требований при создании приложения, чем когда отчет отображается синхронно. Поэтому неудивительно, что эти проблемы стали движущим фактором, который выбирают разработчики режимов.

История в Visual Studio 2010

Одной из самых больших функций ASP.Net ReportViewer в VS 2010 является тот факт, что он сильно зависит от ASP.Net AJAX. По умолчанию программа просмотра будет использовать асинхронные обратные вызовы для всех своих операций. Это означает, что нам больше не нужно полагаться на фреймы для асинхронного получения данных отчета с остальной части страницы ASP.Net. В VS 2010 после завершения загрузки отчета HTML-код, отображаемый в браузере, будет одинаковым независимо от того, используете ли вы синхронный или асинхронный рендеринг.

Все предыдущие побочные эффекты AsyncRendering теперь исчезли. Оба режима поддерживают карту документа. Оба режима поддерживают свойство SizeToReportContent. Асинхронные обратные передачи обычно обрабатываются так же, как традиционные обратные передачи, поэтому вы можете обрабатывать события, возникающие во время обработки отчета. И из-за большой работы, которую мы проделали в этом выпуске для стандартного режима рендеринга HTML и Firefox и Safari, вы никогда не должны видеть двойные (или тройные!) Полосы прокрутки в средстве просмотра.

В VS 2010 AsyncRendering вернулся к своему истинному намерению - он контролирует, блокирует ли начальная обработка отчета всю страницу ASP.Net и ничего больше.

4 голосов
/ 21 марта 2010

У вас есть несколько вариантов в зависимости от проблемы, с которой вы столкнулись. Если одно из этих предложений не работает для вас, пожалуйста, опишите проблемы, которые возникают у вас с элементом управления, более подробно. Например, возникают ли у вас проблемы с элементом управления в конструкторе, Microsoft изменила его функциональность или API или работает неправильно во время выполнения?

  • Если проблема связана с API или поведением во время выполнения программы просмотра отчетов, и если у вас установлены как VS 2008, так и VS 2010, вы можете очень легко удалить ссылку на версию 2010 (фактически версию 10.0) Microsoft. ReportViewer.WebForms под ссылками вашего проекта. Затем вы можете использовать диалоговое окно добавления ссылки, чтобы выбрать версию 2008 года (фактически, версию 9.0). Вам также необходимо обновить каждую страницу, использующую средство просмотра отчетов, и заменить объявление версии 10 объявлением версии 9 ниже.

На каждой странице заменить:

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

С:

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

А в web.config заменить:

<add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

С:

<add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

А в web.config заменить:

<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" />

С:

<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>

А в web.config заменить:

<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

С:

<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  • Если только дизайнер рушится или доставляет вам неприятности, вы можете обернуть версию элемента управления 2010 года в пользовательский или пользовательский элемент управления и использовать ее таким образом на своих страницах. У вас все еще не будет очень хорошего опыта дизайнера, но если дизайнер - ваша проблема, это может быть лучшим обходным путем, чтобы избежать сбоев или других проблем.

  • Если вы все еще не можете заставить это работать, вы можете вернуться к VS2008 и обернуть версию средства просмотра отчетов 2008 года в пользовательский серверный элемент управления. Затем вы можете сослаться на свой новый элемент управления в своем проекте 2010 года. Опять же, вы потеряете поддержку дизайнера таким образом.

В дополнение к этим шагам вам необходимо войти в Microsoft Connect и подробно сообщить о возникшей неполадке, чтобы они могли это исправить и включить в окончательную первоначальную версию Visual Studio 2010 (или, возможно, исправления).

...