我正在与MS Reporting Services合作。基础数据源是微软将收集作为数据源报告
IEnumerable<MyObject>
,我没有使用数据集。
每个MyObject
都有属性和其他IEnumerable
集合。 在报告中,我想显示来自MyObject
和 的所有属性。 我不知道如何显示这个内部集合,所以我做了一个SubReport,我通过了MyObject
.Id,以便SubReport可以自己检索对象并构建这些内部集合的数据源。 我在这个事件中这样做。
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));
}
}
但是在我的主报告中总会有“子报表无法显示”。 (主报告 - 子报告被正确绑定)
任何想法为什么?或者如何以更优雅的方式解决这个问题?
谢谢
这个系列是从对象关系映射检索,它包含ForeignKey的对象,外交部集合等我不得不重建它做的DataTable ..你认为这是一个好方法吗? – 2009-09-09 08:27:32
老实说:我不知道。但DataSet/DataTable通常是从关系数据源映射到的好选择。 DataSet提供DataBase所具有的大多数功能,而表是关系数据源的基本结构。直到现在,我只用了一张桌子,所以我想这也可能是我再次选择它们的原因。 :) – StampedeXV 2009-09-09 08:36:12
我想这取决于检索DataTable与解决问题相比有多难。 – StampedeXV 2009-09-09 08:36:58