Кастинг всегда означает изменять тип данных объекта. Это может быть сделано, например, путем преобразования значения плавающего в целочисленное значение, или путем иного толкования битам. Это - usally поддерживаемый языком (чтение: поддерживаемый компилятором) операция.
термин "преобразование" иногда используется для кастинга, но это обычно делается некоторой библиотекой или Вашим собственным кодом и не обязательно приводит к тому же как кастинг. Например, если Вы имеете имперское значение веса и преобразовываете его в метрический вес, это может остаться тот же тип данных (скажите, плавание), но станьте различным числом. Другой типичный пример преобразовывает от градусов до радиана.
Источником данных для отчета RDLC может быть что угодно, что реализует IEnumerable
. Если это перечисление объектов, то свойства объекта становятся полями в отчете.
Что касается отчетов, у них есть собственное внутреннее представление о том, что такое набор данных. Во время разработки вам необходимо предоставить конструктору отчетов набор данных для работы. Отчет принимает этот набор данных изнутри, и он используется для разработки отчета. Реальность такова, что сам отчет не заботится о фактическом наборе данных. Он заботится только о своей схеме. Однако во время выполнения объекты, которые вы предоставляете для удовлетворения этого набора данных, могут поступать откуда угодно, если они удовлетворяют той же схеме.
У меня есть небольшая запись в блоге моей давности, в которой показано, как получить хорошую поддержку во время разработки, а затем во время выполнения предоставить отчет с любыми данными, которые вы хотите:
Вы можете определенно привязать к 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 нет ничего особенного, но до того момента, когда этот код работал, вероятно, потребовалась солидная неделя. Надеюсь, это поможет.
Верните список ваших бизнес-объектов и добавьте его в качестве источника данных:
ReportViewer.LocalReport.DataSources.Add(new ReportDataSource("Report", new List<ReportDto> { new ReportDto(businessObj) }));
ReportDto - это обертка для вашего бизнес-объекта, в которой выполняются все форматирование, конкатенации и другие изменения, связанные с отчетами. Он излучает только те свойства, которые вам нужны для отчета.
Затем перейдите к добавлению набора данных, выберите пространство имен ReportDto в качестве источника данных и выберите ReportDto в качестве набора данных. Теперь все свойства, которые вы включили в ReportDto, будут доступны в конструкторе.