水晶报表攻克系列4-子报表
使用自报表的关键点是链接字段,也就是说你的主报表数据源与自报表的数据源一定要有一个相同的链接字段,相当于sql的外码和主键的关系。
1) 假设链接字段为OrderCode,在实体类分别定义OrderCode字段,这个一再本系列2中讲过,恕不赘述。
2) 添加一个子报表,设计如下:
3) 然后在主报表中插入这个子报表,并且右键“插入”=》子报表,选择已经添加的子报表
4) 右键点击插入的子报表,选择“更改子报表链接”,分别选择刚刚在主报表和子报表数据源实体类中的OrderCode字段。
5) 在程序中,就可以这样加载了:
1 ReportDocument doc = new ReportDocument();
2 PostPackgeSources sources = new PostPackgeSources();
3 if (PackgeList != null)
4 {
5 PackgeList.ForEach(i => sources.Add(i));
6 }
7 soureCount = sources.Count;
8 doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"Class\CRGasPackge.rpt");
9 doc.SetDataSource(sources);
10
11 //子报表
12 ItemDetailList subSources = new ItemDetailList();
13 if (sources != null)
14 {
15 foreach (PostQueueEntity entity in sources)
16 {
17 List<ItemDetailList> list = new JavaScriptSerializer().Deserialize<List<ItemDetailList>>(entity.PostItemDetail);
18 list.ForEach(p =>
19 subSources.Add(new ItemDetailEntity
20 {
21 OrderCode = entity.OrderCode,
22 ItemCode = p.ItemCode,
23 ItemName = p.ItemName,
24 ItemNum = p.ItemNum
25 }));
26 }
27 }
28 doc.Subreports[0].SetDataSource(subSources);
这样,就成功就加载了子报表了。