关于推模式水晶报表数据源的设置问题

一般我们使用推模式设计报表时,填充数据和设置数据源的代码大致如下(此处假设数据源有两个表):

DataSet ds = new DataSet();
OleDbDataAdapter dataAdapter1 = new OleDbDataAdapter("SELECT * FROM 表1",oleDbConnection1);
dataAdapter1.Fill(ds,"表1");

OleDbDataAdapter dataAdapter2 = new OleDbDataAdapter("SELECT * FROM 表2",oleDbConnection1);
dataAdapter2.Fill(ds,"表2");

Report1 oRpt = new Report1();    //Report1为项目中已经设计好的报表
oRpt.SetDataSource(ds);
crystalReportViewer1.ReportSource = oRpt;

    网上很多人认为在设置报表数据源的时候,即oRpt.SetDataSource(ds)这句应该写成oRpt.SetDataSource(ds.Tables[0]),这样才能将表指定给报表,甚至有人在回答报表加载失败时,认为问题就是出在这里,CSDN里经常可以看到这样的回复。

    其实这种观点是有误的,oRpt.SetDataSource(ds.Tables[0])只适合于指定单表作为数据源的情况,如果是多表(如上面例子代码),这样指定就会丢失表2的数据,甚至可能引起加载失败。

    一般出现加载失败,多数是因为以下几种原因:

    1,报表和数据源的结构不一致,字段多少、类型等不对应;
    2,数据源里各表的链接关系设置不正确,导致主键或索引冲突;
    3,报表路径问题,使用的是绝对路径访问;

    所以,如果出现错误应多检查自己设计是否有问题,只要数据源表和报表模板开发正确,使用oRpt.SetDataSource(ds)是不会有任何问题的!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值