由于报表比较复杂,涉及到多个表的数据,且报表格式比较复杂,所以在设计时先计算出报表所需的所有数据,然后将数据保存至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();
//显示报表.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();