보고 서비스과 협력하고 있습니다. 기본 데이터 소스는Microsoft Reporting with DataSource로
IEnumerable<MyObject>
입니다. 데이터 세트를 사용하고 있지 않습니다.
모든 MyObject
에는 속성 및 일부 다른 IEnumerable
컬렉션이 있습니다. 보고서에서 나는 모든 속성을 MyObject
과 에서 표시하고 싶습니다. 이 내부 컬렉션을 표시하는 방법을 알지 못했기 때문에 서브 보고서에 MyObject
.Id를 전달하여 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));
}
}
그러나 마스터 보고서에는 항상 "The SubReport"가 표시되지 않았습니다. (마스터 보고서 - 하위 보고서가 올바르게 바인딩 됨)
어떤 아이디어가 있습니까? 아니면 이것을 좀 더 우아한 방법으로 해결할 수 있을까요?
감사합니다.
이 컬렉션은 ObjectRelational 매퍼에서 검색, 그리고 외래 키 객체, 나는 그것이 DataTable을을 다시해야 할 것 해외 컬렉션 등을 포함 .. 그게 좋은 접근 방법이라고 생각하니? –
정직하게 : 모르겠다. 그러나 DataSet/DataTable은 일반적으로 관계형 데이터 소스에서 매핑하는 것이 좋습니다. DataSet은 DataBase에서 수행하는 대부분의 기능을 제공하며 테이블은 관계형 데이터 소스의 기본 구조입니다. 나는 지금까지 테이블과 만 일했기 때문에 그것이 내가 다시 그들을 선택할 이유가 될 수 있다고 생각합니다. :) – StampedeXV
나는 당신의 문제를 고치는 것과 비교하여 DataTable을 검색하는 것이 얼마나 어려운지에 달려 있다고 생각합니다. – StampedeXV