lifengguo 's Blog

『 逆水行舟用力撑,一篙松劲退千寻!』

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
由于报表比较复杂,涉及到多个表的数据,且报表格式比较复杂,所以在设计时先计算出报表所需的所有数据,然后将数据保存至DataSet中,其中DataSet包含了6个表,然后再将DataSet写入XML文件,然后再用XML文件作为报表数据字段的设计依据。

//显示报表.Click()
            ReportQuery rq=new ReportQuery();
            DataSet ds=new DataSet();
            ds=rq.GetReportData(JYJXSBM_List,SFZH_List);    //获取报表数据
            ds.WriteXML(@"C:\Report.XML");                  //将报表数据写入XML文件
            FmReportForms fm=new FmReportForms();
            fm.Show();
//报表Load()
             SamsPoint.Report.SDAS.CrystalReport4 cr=new SamsPoint.Report.SDAS.CrystalReport4();
             DataSet ds=new DataSet();
             ds.ReadXml(@"C:\Report.XML");
             cr.SetDataSource(ds);
             this.crystalReportViewer1.ReportSource=cr;

运行时有时候会出错:未知的查询引擎错误、查询引擎错误,注意不是所有的情况都会出错!

后来想到为什么要写入XML文件,然后再读取XML文件至数据集呢,不是多此一举吗?其实最初的想法是既然以XML为数据源的,那么恳定要读取XML文件,然后再将读取出来的数据作为数据源啦!大错特错!!在设计报表时的从XML文件设计的报表字段其实只是一个模板,只要在显示报表时设置的报表数据源(cr.SetDataSource(ds); )与设计阶段的数据源是一致的OK了。

那为什么会报错呢?因为在写入XML文件时有些字段为空,所在在XML文件里就没有这个字段了,这样一来,出错就在所难免了!

//显示报表.Click()
            ReportQuery rq=new ReportQuery();
            DataSet ds=new DataSet();
            ds=rq.GetReportData(JYJXSBM_List,SFZH_List);    //获取报表数据
            
            FmReportForms fm=new FmReportForms();
            fm.ReportData=ds;
            fm.Show();





posted on 2007-06-13 08:51  黎锋果(peace)  阅读(1022)  评论(0编辑  收藏  举报