随笔 - 96, 文章 - 0, 评论 - 351, 阅读 - 14万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

在水晶报表中显示多个链接的数据表内容

Posted on   faib  阅读(4470)  评论(1编辑  收藏  举报

  在水晶报表中,如果显示多个数据表内容?起初我想到的是使用子报表,通过代码动态的绑定数据源给子报表,来显示所需数据。不过,最近发现,使用子报表显示的某些字段无法显示,就连前些日子写的那篇“动态显示图片”都无法显示了,不知道是不是水晶报表组件中哪里的设置问题。从此看来使用子报表并不是明智之举。
  第二想到的,并是使用一个数据集,添加关系链接,加入相应的数据表,然后绑定给水晶报表。经过几番周折,终于拨云见彩虹了,呵呵。

一、添加一个XML架构,定义各表的字段名称及类型

说明:上表中xxbg是一个人员的基本信息表,gzjl是一个工作经历表,即个人信息显示报表中要显示他的工作经历。

二、在Database Expert里加入此文件,添加以上两个表,并添加链接


三、设计报表,将xxbg中的字段放在Report Header节中,将gzjl中的字段放在Details节中。

四、代码实现

 1        private void Display()
 2        {
 3            //创建一个数据库连接
 4            DataManager sql = Common.CreateDataManager();
 5            //定义报表对象
 6            rptXkbz rpt = new rptXkbz();
 7
 8            //提供给报表的数据集
 9            DataSet dstRpt = new DataSet();
10            //个人信息表
11            DataTable dtblTmp = sql.ExecuteToDataTable("select * from zjy_ryxxbg where bh='" + Request.QueryString["bh"+ "'");
12            //添加照片显示字段
13            dtblTmp.Columns.Add("zpdata"typeof(byte[]));
14            if(dtblTmp.Rows[0]["zp"].ToString() != "")
15            {
16                dtblTmp.Rows[0]["zpdata"= GetFileStream(dtblTmp.Rows[0]["zp"].ToString());
17            }

18            //添加性别
19            dtblTmp.Columns.Add("xb1"typeof(string));
20            dtblTmp.Rows[0]["xb1"= dtblTmp.Rows[0]["xb"].ToString() == "True" ? "" : "";
21            //添加第一个表到数据集
22            dstRpt.Tables.Add(dtblTmp);
23            dtblTmp.TableName = "xxbg";
24            //添加第二个表到数据集
25            DataTable dtblTmp1 = sql.ExecuteToDataTable("select dlm,ksrq,jsrq,gzdw,xmmc from zjy_gzjl where dlm='" + dtblTmp.Rows[0]["dlm"+ "'").Copy();
26            dstRpt.Tables.Add(dtblTmp1);
27            dtblTmp1.TableName = "gzjl";
28
29            //建立两表的关系链接
30            dstRpt.Relations.Add(new DataRelation("link", dtblTmp.Columns["dlm"], dtblTmp1.Columns["dlm"]));
31            rpt.SetDataSource(dstRpt);
32            crv.ReportSource = rpt;
33        }
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示