• PUSH模式样板招式


    新建一个 Asp.Net CrystalReports的网站

    弹出下面这个界面后,选第2项-作为空白报表,然后点确认,进入一个空白界面。

    新建一个数据集合


    出现此提示时,点“是”


    然后还会出来连接数据库的提示,一律点否,直至界面上什么提示也没有
    在这个界面上,点右键,添加一个datatable,命名为myTable。


    然后在myTable里增加相应的列,我这里有3个列,注意要设置好类型。




    特别说明:
    因为水晶报表里不认datatime型,对于2009-06-26 9:23:15
    会自动截断为2009-06-26
    所以datatime型数据在xsd文件中,可设置为string型
    而代码中的SQL中可把字段转换为String传入。


    xsd设计完毕后,开始进入报表模板设计阶段。

    在“数据库字段”上点右键,选“数据库专家”


    再弹出的界面上,点“项目数据”,依次点开,找到我们刚才自己做的mytable


    确定后,在“数据库专家”下面会出现表名mytable,点开后会看到字段,
    把字段拖到模板上的详细资料节即完成基础模板的制作了


    点一下预览,会看到虽然我们还没有任何实际的数据操作,但是界面上已经有数据了
    这是水晶报表的一个虚拟数据,可以看到一个最终显示的效果。


    好了,上代码

    C# code
    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using CrystalDecisions.Shared; using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Web; using System.Data.OleDb; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ConfigureCrystalReports(); } private void ConfigureCrystalReports() { //连接字串 String connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\CrZen\testall.mdb;"; OleDbDataAdapter da = new OleDbDataAdapter(); OleDbConnection cn = new OleDbConnection(connstr); // da = new OleDbDataAdapter("SELECT * From RPT_CR_TEST1", cn); //创建我们的DataSet1实例 DataSet1 dt1 = new DataSet1(); //填充dt1 //注意:表名mytable必须与我们在xsd设计的表名称一致。 //本例中数据库的表实际名称为RPT_CR_TEST1,而最终是以mytable为准的 //使用 PUSH模式的优点就在此,可以自由组合SQL //前提是表名称和字段名(需要在SQL中使用as别名的方式跟xsd中设计的字段名一致)都要一致 da.Fill(dt1, "mytable"); ReportDocument myReport = new ReportDocument(); string reportPath = Server.MapPath("crystalreport1.rpt"); myReport.Load(reportPath); //绑定数据集,注意,一个报表用一个数据集。 myReport.SetDataSource(dt1); CrystalReportViewer1.ReportSource = myReport; } }


    然后运行就可以了。



    这里做一下说明,在【推拉之间】没有说这个xsd,是因为当时没讲到细节操作。
    说了很难理解。
    这个xsd,是我们自己构造的,做个比喻吧:
    就是xsd比作个一个架子,它负责把水晶报表撑起来,但是是空的,没有内容
    我们用 PUSH模式,把数据塞给它,把架子塞满,这样水晶报表也就能呈现出效果来



    常见问题:
    1:报表可以显示出来,但是没数据,
    一般有以下几种情况
    a:表中确实没数据
    b:da.Fill(dt1, "mytable");表名称与xsd中设计的表不一致
    c: 如果你用了多个表,可能是因为表默认的关联关系导致无数据

    2:出现下面这个图的提示,特别是翻页、打印、导出的时候,因为这些动作都需要重新连接数据库源。


    a:如果是多表的话,可能是部分表没有赋值。
        水晶报表需要对用到的每个表进行验证,即使没数据。没有的话,传个空的记录集也行。
    b:代码没有放到Page_Load或Page_init里,或者是放到了,但是控制了 postback。
      因为http是无状态的,如果控制了postback,水晶报表就丢失了前面的设置,会导致出现此情况的 
     
  • 相关阅读:
    Solr6 Suggest(智能提示)
    Oracle12c:安装后新建用户及其默认表空间,并创建表测试
    Django:使用PyCharm创建django项目并发布到apache2.4
    后台收集
    Hadoop+Spark:集群环境搭建
    Hadoop:搭建hadoop集群
    Linux:SSH错误"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "
    Linux:Ubuntu14.04离线安装scala(在线安装)
    Linux:Ubuntu 14.04 Server 离线安装Jjava8(及在线安装)
    Linux:实现Hadoop集群Master无密码登录(SSH)各个子节点
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1515825.html
Copyright © 2020-2023  润新知