您的位置:程序门 -> .net技术 -> c#



多表填充水晶报表的问题,求能实际解决问题的方案!!知道者请进......


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


多表填充水晶报表的问题,求能实际解决问题的方案!!知道者请进......[已结贴,结贴人:sz709]
发表于:2007-01-11 10:17:32 楼主
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培训

求高手解决方案!!!
发表于:2007-01-11 10:39:491楼 得分:15
呵呵
接分
发表于:2007-01-11 10:41:142楼 得分:0
這樣
你可以先查查xxx表有多少行
看看有沒有空行
有就ds.table[ "xxx "].row(行號).刪除
发表于:2007-01-11 11:43:073楼 得分:0
楼上的大哥,你没有明白我的意思,我的xxx表中是不会有空行的,   求各位高手帮忙解决啊,先谢了
发表于:2007-01-11 13:17:184楼 得分:10
这样子的啊,写程序可能会比较麻烦
你直接在界面中建一个dataset
然后把三个表加进ds中
在水晶报表中分成三组分别放三个表的字段
把cr1.setdatasource(ds.tables[ "xxx "]);
改成cr1.setdatasource(ds);

发表于:2007-01-11 13:25:195楼 得分:15

使用水晶报表push模式

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

然后再将生成的ds作为参数传进来   setdatasource(ds)
发表于:2007-01-11 14:05:096楼 得分:0
先定義子報表
再定義子報表數據源
发表于:2007-01-11 14:06:577楼 得分:0
学习
发表于:2007-01-11 14:15:378楼 得分:0
不知道是不是我的程序思想有问题???

请问楼上的高手大哥们,有没有别的解决方案啊?
发表于:2007-01-11 14:38:249楼 得分:0
dim   dt   as   new   datatable
                        dim   reg   as   new   moretable   '定義報表
                        dim   aa   as   string   =   " "
                        aa   =   reg.subreports.item(1).name   '   '獲取報表的子報表名稱,第二個報表名稱
                        reg.subreports.item(0).setdatasource(dt)  
                        msgbox(aa)
发表于:2007-01-11 14:46:2510楼 得分:0
能把源代码贴出来么?用“xxx”还是不大明白
发表于:2007-01-11 15:00:5611楼 得分:0
我贴的都是源代码啊?   "xxx "就是我填充的表名啊
发表于:2007-01-11 15:10:1812楼 得分:0
da   =   new   sqldataadapter( "ps_a ",   cn);
da.selectcommand.commandtype   =   commandtype.storedprocedure;
da.fill(ds, "table1 ");

da   =   new   sqldataadapter( "ps_b ",   cn);
da.selectcommand.commandtype   =   commandtype.storedprocedure;
da.fill(ds, "table2 ");

da   =   new   sqldataadapter( "ps_c ",   cn);
da.selectcommand.commandtype   =   commandtype.storedprocedure;
da.fill(ds, "table3 ");

crystalreport1   cr1   =   new   crystalreport1();
cr1.setdatasource(ds);
发表于:2007-01-11 15:14:0813楼 得分:0
楼上的大哥,你的这种做法我已测试过,
结果是:水晶报表页无任何数据了

多谢
发表于:2007-01-11 15:14:3714楼 得分:0
为什么用了三次fill?一次不能解决么?
select   a.*,   b.*,   c.*   from   a,   b,   c   where   ......
发表于:2007-01-11 15:19:4015楼 得分:0
我的3个表结构不一样啊,麻烦楼上的看清题目,多谢
发表于:2007-01-11 15:24:5016楼 得分:0
三个表(a、b、c)fill到一个表(xxx)
xxx包含了这三张表的所有列
是这个意思么?
发表于:2007-01-11 15:25:4217楼 得分:0
……

没道理吧

我就这么做的啊

你确定ds里面有数据吗?
发表于:2007-01-11 15:29:5118楼 得分:0
是的,xxx包含所有列
ds里肯定有数据的
发表于:2007-01-11 15:33:5719楼 得分:10
第一次查a表,fill   xxx,证书和培训都产生一个空值
第二次查b表,fill   xxx,培训产生两个空值
发表于:2007-01-11 15:37:2820楼 得分:0
对,就是这样的,现想把空格去掉,我不知道怎么做,
也许我从一开始就做错了,请大哥提供正确思路,多谢了
发表于:2007-01-11 15:44:3321楼 得分:0
select   a.工号   as   工号,a.性别,a.籍贯,...   b.*,   c.*   from   a,   b,   c   where   a.工号=b.工号   and   a.工号=c.工号
发表于:2007-01-11 15:52:0822楼 得分:0
楼上的大哥,你的这种做法我已测试过,
结果是:水晶报表页无任何数据了
多谢
发表于:2007-01-11 15:59:1023楼 得分:0
fill函数返回值是多少?
把sql语句select   a.工号   as   工号,a.性别,a.籍贯,...   b.*,   c.*   里每个列全as   成xxx里定义的列名
发表于:2007-01-11 16:09:4424楼 得分:0
全部是这样做的啊,不行
发表于:2007-01-11 16:38:3525楼 得分:0
算了,肯定是我的思路有问题,谢谢大家,结帐
发表于:2007-01-12 08:33:4926楼 得分:0
xxx表结构是什么?好像有问题
发表于:2007-01-12 08:38:0427楼 得分:0
会不会因为你查询表的前面有数据不是属于这个员工的啊


快速检索

最新资讯
热门点击