最近发现把所有的报表作为嵌入资源编译到主程序中,exe文件比较大。
有没有下面的实现方法:
***报表是推式。先通过程序获得数据源,例如DataSet,然后再加载报表文件(从部署到客户端的磁盘中加载),再给报表设定已获得的数据源DataSet。注:
1、报表是推式,非拉式。如果是拉式是可以从磁盘加载的。
2、不需要考虑报表设计用的数据源与加载时设定的数据源类型是否一致,程序可以确保一致。

解决方案 »

  1.   

    ReportDocument reportDocument = new ReportDocument();
    reportDocument.Load(@"E:\代码\rpttest\CrystalReport1.rpt");
    reportDocument.SetDataSource(myDataSet);
    crystalReportViewer1.ReportSource = reportDocument;

    this.crystalReportViewer1.RefreshReport();不知道你是不是这个意思?
      

  2.   

    二楼的模式是完全的拉,程序准备参数传给报表!组织sql和生成数据源都是报表完成的。
    楼主的意思是,客户端报表的条件和字段都设置好了!
    在代码中,组织sql和生成数据源,给报表对象一个dataset!本人只在active report中用过,楼主所指的模式。
      

  3.   

    哈,我經常就採用的是樓主所說的推式,參考代碼如下(我用的是VB.NET+MYSQL):
     Dim cn As New MySqlConnection("server=localhost;user id=root;password=1234;database=gs")
            Dim adpt As New MySqlDataAdapter("SELECT  user.id, user.name,user.age,user.address, scores.chinese, scores.maths,  scores.english FROM User  INNER JOIN scores ON (user.id=scores.id) ORDER BY  User.id", cn)
            Dim ds As New DataSet        cn.Open()
            adpt.Fill(ds)
            cn.Close()
            Dim rept As New CrystalReport2
            rept.SetDataSource(ds.Tables(0))
            'Response.Write(ds.Tables(0).Rows.Count())
           
            ds = Nothing
            adpt = Nothing
            
            Me.CrystalReportViewer1.ReportSource = rept
            Me.CrystalReportViewer1.DataBind()
            rept = Nothing
    這種方式可以對資料做處理,還可以在此寫上過濾條件,省去傳遞參數...
      

  4.   

    to panda2fw2(我爱Monkey) 
    <<<<要的就是你的这种方式,谢谢。
    to daisylh(婁子) 
    <<<<谢谢你的回答,不过的你的报表不是从磁盘加载的,而是强名称类型(忘了是不是这样表达)。