关闭

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

2554人阅读 评论(2) 收藏 举报

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

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)是不会有任何问题的!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:54195次
    • 积分:741
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:4篇
    • 译文:0篇
    • 评论:30条
    最新评论