在水晶报表中,如果显示多个数据表内容?起初我想到的是使用子报表,通过代码动态的绑定数据源给子报表,来显示所需数据。不过,最近发现,使用子报表显示的某些字段无法显示,就连前些日子写的那篇“动态显示图片”都无法显示了,不知道是不是水晶报表组件中哪里的设置问题。从此看来使用子报表并不是明智之举。
第二想到的,并是使用一个数据集,添加关系链接,加入相应的数据表,然后绑定给水晶报表。经过几番周折,终于拨云见彩虹了,呵呵。
一、添加一个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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
//建立两表的关系链接
30
dstRpt.Relations.Add(new DataRelation("link", dtblTmp.Columns["dlm"], dtblTmp1.Columns["dlm"]));
31
rpt.SetDataSource(dstRpt);
32
crv.ReportSource = rpt;
33
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)