水晶报表攻克系列4-子报表

水晶报表攻克系列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);        
复制代码

  这样,就成功就加载了子报表了。

posted @   Mark Rao  阅读(895)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示