我正在與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