Я работаю с MS Reporting Services. Базовым источником данных являетсяMicrosoft Reporting with Collection как DataSource
IEnumerable<MyObject>
, я не использую DataSets.
Каждый MyObject
имеет свойства и некоторые другие IEnumerable
коллекции. В отчете я хочу отобразить все свойства от MyObject
и списков коллекций. Я не знал, как отображать эти внутренние коллекции, поэтому я сделал SubReport, которому я передал MyObject
. И так, чтобы SubReport мог получить объект самостоятельно и построить DataSource для этих внутренних коллекций. Я делаю это в этом случае.
myReportViewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
int id;
if (e.Parameters.Count > 0 && int.TryParse(e.Parameters[0].Values[0], out id))
{
MyObject current = myObjects.Where(x => x.MyObject.Id == id).FirstOrDefault();
InnerListBindingSource.DataSource = current.InnerCollection;
e.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource(
"MyInnerCollectionDataSource", InnerListBindingSource));
}
}
Но в моем основном отчете всегда есть «SubReport не может быть показан». (Главный отчет - подзаголовок правильно скован)
Любая идея почему? Или как решить это более элегантным способом?
Спасибо
Эта коллекция извлекается из ObjectRelational Mapper, и он содержит ForeignKey предметы, иностранные коллекции и т.д. Я бы восстановить это сделать DataTable .. Считаете ли вы, что это хороший подход? –
Честно говоря: я не знаю. Но DataSet/DataTable обычно является хорошим выбором для сопоставления с реляционным источником данных. DataSet предлагает большинство функциональных возможностей, которые делает DataBase, а таблица является базовой структурой реляционного источника данных. Я работал только с таблицей до сих пор, поэтому, я думаю, это также может быть причиной, по которой я буду выбирать их снова. :) – StampedeXV
Я думаю, это зависит от того, насколько сложно получить DataTable по сравнению с исправлением вашей проблемы. – StampedeXV