日期:2014-05-20  浏览次数:20716 次

多表填充水晶报表的问题,求能实际解决问题的方案!!知道者请进......
http://community.csdn.net/Expert/topic/5288/5288307.xml?temp=.9939081

因描述有问题,搞得大家都看不明白,现详细描述一下我的问题,请大家帮助解决,一定给分

我有表A含字段(工号,性别,籍贯...),表B含字段(工号,   证书名称...),表C含字段(工号,培训经历..)
表A
工号   性别     籍贯   ...
101       男         广东

表B
工号   证书名称   ...  
101     CCNP
101     大学毕业证

表C
工号     培训经历....
101       CCNP培训
101       ORACEL培训
101       SQL培训

现在想把这3个表的数据绑定到水晶报表页面P(只有一页)上,
其中[证书资料][培训资料]为子报表,显示如下:

报表

基本资料
----------------------------------------
工号:101    
性别:男
籍贯:广东

证书资料
-----------------------------------------
工号   证书名称   ...  
101     CCNP
101     大学毕业证

培训资料
-----------------------------------------
工号     培训经历....
101       CCNP培训
101       ORACEL培训
101       SQL培训


------------------------------------------

我用如下语名填充水晶报表:

da   =   new   SqlDataAdapter( "PS_A ",   cn);
da.SelectCommand.CommandType   =   CommandType.StoredProcedure;
da.Fill(ds, "XXX ");

da   =   new   SqlDataAdapter( "PS_B ",   cn);
da.SelectCommand.CommandType   =   CommandType.StoredProcedure;
da.Fill(ds, "XXX ");

da   =   new   SqlDataAdapter( "PS_C ",   cn);
da.SelectCommand.CommandType   =   CommandType.StoredProcedure;
da.Fill(ds, "XXX ");

CrystalReport1   Cr1   =   new   CrystalReport1();
Cr1.SetDataSource(ds.Tables[ "XXX "]);
this.crystalReportViewer1.ReportSource   =   Cr1;

但出现问题:证书资料及培训资料显示时出现空格如下:
证书资料
-----------------------------------------
工号   证书名称   ...  
<空格>
101     CCNP
101     大学毕业证

培训资料
-----------------------------------------
工号     培训经历....
<空格>
<空格>
<空格>
101       CCNP培训
101       ORACEL培训
101       SQL培训

求高手解决方案!!!


------解决方案--------------------
呵呵
接分
------解决方案--------------------
这样子的啊,写程序可能会比较麻烦
你直接在界面中建一个DataSet
然后把三个表加进ds中
在水晶报表中分成三组分别放三个表的字段
把Cr1.SetDataSource(ds.Tables[ "XXX "]);
改成Cr1.SetDataSource(ds);


------解决方案--------------------

使用水晶报表push模式

首先可以利用同架构的数据集来设计水晶报表

然后再将生成的DS作为参数传进来 SetDataSource(DS)
------解决方案--------------------
第一次查A表,FILL XXX,证书和培训都产生一个空值
第二次查B表,FILL XXX,培训产生两个空值