Andrew Alix Ответов: 2

Reportviewer показывает пустой отчет с использованием динамического набора данных


Я использую динамическую таблицу в наборе данных и заполняю ее данными из различных других таблиц на основе запроса linq. Я создал report.rdlc на основе этой таблицы и поместил ее в reportviewer на форме.

Для получения дополнительной информации я использовал несколько отчетов в элементе управления ReportViewer для отображения предварительно заполненных таблиц с помощью TableAdapter.Заполните метод с успехом. У меня есть эта проблема только тогда, когда я использую динамическую таблицу, которую я заполняю программно.

Я потратил невероятное количество часов на изучение управления ReportViewer, динамическое связывание наборов данных с ReportViewers, создание наборов данных и т. д.

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

Ниже приведен сжатый код, который работает в datagridview, а также работает с использованием Crystal Reports, от которого я пытаюсь уйти:
   Dim ds As New TalkScheduleDataSet
   Dim dt As DataTable = ds.ScheduleReport
   Dim sched = From s In db.TalkSchedules Where s.Date >= CDate(fromDate) And s.Date <= CDate(toDate) Select s

     For Each sch In sched
        'Get the associated data, convert null values, etc.
        dt.Rows.Add(sch.xxxx 'and whatever data needs to inserted )
        dt.AcceptChange
     Next
     'display the report in the datagridview
     'The data shows up in the DataGridview as follows
     dgvReport.DataSource = dt
     dgvReport.Refresh()

     'Set up the report
     ReportViewer.Refresh()
end sub


Данные отображаются в Datagridview, но отчет всегда отображается пустым.
Я попробовал следующее:
ReportViewer.LocalReport.DataSources.Add(New Microsoft.Reporting.WinForms.ReportDataSource("TalkScheduleDataSet", dt))
ReportViewer.Update()
ReportViewer.Refresh()


Я пробовал в различных комбинациях ниже кода:
With ReportViewer
  .ReportPath
  .Reset()
  .LocalReport.DataSources.Add(WinForms.ReportDataSource("DataSetName", dt)
  .Refresh()
End With


Также попробовал следующее После заполнения таблицы, которая все еще также отображается в DataGrid:
'Also used "ReportSchedule" in place of dt
Dim rds ReportDataSource = new ReportDataSource("TalkScheduleDataSet", dt)
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(rds)
ReportViewer1.LocalReport.Refresh();

Ничто из вышеперечисленного ничего не показывает в reportViewer, и ошибок нет.
Я даже пробовал настроить таблицу и набор данных с помощью класса, а затем ссылаться на них с помощью ReportViewer.

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

Надеюсь, это достаточно ясно. Я знаю, что некоторые подумают: если это работает с CR, то почему бы не использовать CR. Однако дело в том, что я не могу заставить его работать с помощью ReportViewer, и я не знаю почему.

2 Ответов

Рейтинг:
2

Andrew Alix

Это было так давно, что я не могу вспомнить, когда это работало. От разочарования я пошел в SAP Crystal Reports и скачал бесплатную версию Visual Studio.

Новый (я думаю, что он все еще бесплатный) уже здесь

https://www.sap.com/cmp/td/sap-crystal-reports-visual-studio-trial.html

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

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


Рейтинг:
0

Member 14915876

как я ни старался , это должно было быть освежающим в отчете. это работает на меня.

это.reportViewer1.RefreshReport();