Вот мое решение. У меня есть традиционный проект с уровнем данных под названием «Данные».
Теперь мои RDLC размещены в основном веб-проекте "Web".
Итак, мой тип .NET в «Данные»:
Data.Models.Reports.MyRepository
; и метод в этом типе:
GetMyReport
К счастью, ReportDataSource имеет метод перегрузки Add, который принимает IDataSource в качестве второго параметра. Как только вы поняли, что все ясно.
//Create object data source
ObjectDataSource objDataSource = new ObjectDataSource();
objDataSource.TypeName = "Data.Models.Reports.MyRepository";
objDataSource.SelectMethod = "GetMyReport";
//Add parameters if any ...
objDataSource.SelectParameters.Add("Param1", "");
Вот магия. Источник данных объекта вполне приемлем в качестве второго параметра в конструкторе
ReportDataSource rptDataSource = new ReportDataSource("DataSet1",objDataSource);
reportViewer.LocalReport.DataSources.Add(rptDataSource);
Работает как очарование для меня.