Как создать отчет (RDLC) без базы данных?

Кастинг всегда означает изменять тип данных объекта. Это может быть сделано, например, путем преобразования значения плавающего в целочисленное значение, или путем иного толкования битам. Это - usally поддерживаемый языком (чтение: поддерживаемый компилятором) операция.

термин "преобразование" иногда используется для кастинга, но это обычно делается некоторой библиотекой или Вашим собственным кодом и не обязательно приводит к тому же как кастинг. Например, если Вы имеете имперское значение веса и преобразовываете его в метрический вес, это может остаться тот же тип данных (скажите, плавание), но станьте различным числом. Другой типичный пример преобразовывает от градусов до радиана.

23
задан greenoldman 11 March 2011 в 16:49
поделиться

3 ответа

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

Что касается отчетов, у них есть собственное внутреннее представление о том, что такое набор данных. Во время разработки вам необходимо предоставить конструктору отчетов набор данных для работы. Отчет принимает этот набор данных изнутри, и он используется для разработки отчета. Реальность такова, что сам отчет не заботится о фактическом наборе данных. Он заботится только о своей схеме. Однако во время выполнения объекты, которые вы предоставляете для удовлетворения этого набора данных, могут поступать откуда угодно, если они удовлетворяют той же схеме.

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

http://blogs.msdn.com/b/magreer/archive/2008/10/16/setting-the-datasource-for-a-report-at-runtime.aspx

29
ответ дан 29 November 2019 в 01:54
поделиться

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

Вот пример, где мы программно загружаем элемент управления RDLC для рендеринга PDF, используя DataTables:

Dim Viewer As New ReportViewer
Viewer.LocalReport.ReportPath = "Physicians\Patients\OrderPlacement\DownloadRx\RxPdf.rdlc"

Me.LoadReport(orderID, Viewer)

Dim Renderer As New Code.Reporting.RenderToPDF
Renderer.Save(Viewer, FileFullPath)

И вот содержимое LoadReport:

Private Sub LoadReport(ByVal orderID As Integer, ByVal viewer As ReportViewer)
    'This is adapted from here: http://www.codeproject.com/KB/reporting-services/RDLC_and_DataSet.aspx
    '--Setup
    viewer.LocalReport.DataSources.Clear()
    viewer.LocalReport.EnableHyperlinks = True

    '--Configure DataSources
    Dim DocumentData As New RxDocumentData(orderID)
    Me.SetupRxPdfDataSourceHeader(DocumentData, viewer)
    Me.SetupRxPdfDataSourceMetrics(DocumentData, viewer)
    Me.SetupRxPdfDataSourceOrderHeader(DocumentData, viewer)
    Me.SetupRxPdfDataSourceOrderItems(DocumentData, viewer)
    Me.SetupRxPdfDataSourceChainOfCustody(DocumentData, viewer)
    Me.SetupRxPdfDataSourcePreTreatmentWorkupOrderTags(DocumentData, viewer)
    Me.SetupRxPdfDataSourceTakeHomeMedicationsOrderTags(DocumentData, viewer)

    viewer.LocalReport.Refresh()
End Sub

И Вот один из тех маленьких методов конфигурации:

Private Sub SetupRxPdfDataSourceHeader(ByVal data As RxDocumentData, ByVal viewer As ReportViewer)
    Dim Dset_Header As New ReportDataSource("Dset_Header", data.HeaderDataTable)
    viewer.LocalReport.DataSources.Add(Dset_Header)
End Sub

data.HeaderDataTable - это просто строго типизированная DataTable, которую мы создаем программно и помещаем данные вручную.

В DataTable нет ничего особенного, но до того момента, когда этот код работал, вероятно, потребовалась солидная неделя. Надеюсь, это поможет.

2
ответ дан 29 November 2019 в 01:54
поделиться

Верните список ваших бизнес-объектов и добавьте его в качестве источника данных:

ReportViewer.LocalReport.DataSources.Add(new ReportDataSource("Report", new List<ReportDto> { new ReportDto(businessObj) }));

ReportDto - это обертка для вашего бизнес-объекта, в которой выполняются все форматирование, конкатенации и другие изменения, связанные с отчетами. Он излучает только те свойства, которые вам нужны для отчета.

Затем перейдите к добавлению набора данных, выберите пространство имен ReportDto в качестве источника данных и выберите ReportDto в качестве набора данных. Теперь все свойства, которые вы включили в ReportDto, будут доступны в конструкторе.

0
ответ дан 29 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: