Передайте набор данных в подотчет с помощью служб отчетов SQL Server - PullRequest
1 голос
/ 20 февраля 2009

Я использую службы отчетов SQL Server и конструктор отчетов, который поставляется с Visual Studio. У меня есть действительно большой отчет. На самом деле он настолько велик, что Visual Studio зависает (иногда по несколько часов) или просто падает, когда я делаю изменения.

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

Одна проблема: мой подчиненный отчет использует те же данные, что и мой основной отчет. Прямо сейчас он заполняет свой набор данных путем повторного запроса к базе данных. Дополнительное обращение к базе данных приводит к тому, что создание отчета занимает вдвое больше времени; с 45 минут до 1 1/2 часа для генерации.

Я бы хотел избежать повторного попадания в базу данных и вместо этого использовать один и тот же набор данных в обоих отчетах.

Как я могу поделиться или передать набор данных между отчетом и вложенным отчетом?

Ответы [ 6 ]

3 голосов
/ 05 мая 2012

Я думаю, что это может помочь вам: http://www.gotreportviewer.com/subreports/index.html

Предоставление данных для подотчета - событие SubreportProcessing. предоставить данные для подотчета, который вы должны обработать Событие SubreportProcessing. Обратите внимание, что это событие в LocalReport объект. Вы можете добавить обработчик событий следующим образом:

private void MainForm_Load(object sender, EventArgs e)
{
    this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(MySubreportEventHandler);
}

Ниже приведен пример для обработчика событий. В этом примере LoadSalesData определен для возврата DataTable.

void MySubreportEventHandler(object sender, SubreportProcessingEventArgs e)
{
    e.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()));
}

Если в вашем отчете несколько подотчетов, вы можете посмотреть на ReportPath свойство SubreportProcessingEventArgs и предоставить данные для соответствующий подотчет. Вы также можете изучить значения Свойство Parameters SubreportProcessingEventArgs возвращает только подмножество данных, которое соответствует параметрам подотчета, как упоминается здесь.

0 голосов
/ 30 июля 2009

Если вы создаете таблицу, вы можете объединить все ячейки строки сведений и поместить подотчет в качестве содержимого. Затем установите параметр вложенного отчета в поле, для которого вы хотите запустить вложенный отчет.

Jason

0 голосов
/ 03 июля 2009

Вы можете сделать это, используя фиктивный параметр:

я. Создайте параметр в своем основном отчете «MyData» и отметьте «внутренний»

II. Установите значение по умолчанию «MyData» для вашего набора данных

III. Задайте параметр подчиненного отчета с помощью выражения

=Parameters!MyData.Value

Надеюсь, это поможет, Duncan

0 голосов
/ 19 мая 2009

Вы пытались использовать список в списке, где оба списка используют один и тот же набор данных, а затем фильтровать внутренний список для отображения только записей, связанных с внешним списком?

Что касается времени выполнения, то 45 минут кажутся ужасно долгим временем. Я предполагаю, что вы провели некоторый анализ плана выполнения, чтобы убедиться, что ваш запрос или хранимая процедура использует значимые индексы?

Надеюсь, это поможет,

Bill

0 голосов
/ 04 марта 2009

У меня есть несколько сообщений о том, что SQL настолько сложен, что блокирует Visual Studio, когда я пытаюсь его отредактировать. В этих отчетах я перехожу прямо к представлению «Код» и редактирую XML напрямую, что работает. Я также делаю это, когда Visual Studio таинственным образом делает столбцы немного шире, чем я их установил. Однако я сомневаюсь, что вы захотите пойти по этому пути, если вы слишком сильно редактируете макет отчета.

Вместо выполнения запроса в отчете, можно ли построить таблицу с использованием хранимой процедуры, которую используют оба отчета? Первый отчет запускает хранимую процедуру для построения таблицы, а затем оба отчета просто запрашивают отчет. Следите за проблемами параллелизма, если отчет может быть запущен несколькими пользователями.

0 голосов
/ 21 февраля 2009

Я уверен, что вы не можете. Возможно, вам лучше поискать способы полностью изменить отчет, чтобы он не был настолько большим ... не говоря уже о различных проблемах с подотчетами при экспорте в Excel.

...