水晶报表攻克系列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);
这样,就成功就加载了子报表了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现