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, и я не знаю почему.