zoukankan      html  css  js  c++  java
  • [vs2008环境]绑定水晶报表的两种方式(Pull和Push)

    第一种:通过连接现成的数据源来装载数据,也就是Pull模式(被动的,简单的,方便的):

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using DAL;
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;

    namespace WebSite
    {
        
    public partial class Report : System.Web.UI.Page
        {
            ReportDocument rdoc 
    = new ReportDocument();
            
    protected void Page_Load(object sender, EventArgs e)
            {
                rdoc.Load(Server.MapPath(
    "CrystalReport1.rpt"));
                
    #region 去掉登录界面
                TableLogOnInfo logonInfo 
    = new TableLogOnInfo();
                
    foreach (CrystalDecisions.CrystalReports.Engine.Table tb in rdoc.Database.Tables)
                {
                    logonInfo 
    = tb.LogOnInfo;
                    logonInfo.ConnectionInfo.ServerName 
    = "127.0.0.1";
                    logonInfo.ConnectionInfo.DatabaseName 
    = "Drag";
                    logonInfo.ConnectionInfo.UserID 
    = "tmac";
                    logonInfo.ConnectionInfo.Password 
    = "13200841";
                    tb.ApplyLogOnInfo(logonInfo);
                }
                
    #endregion
                
    this.CrystalReportViewer1.ReportSource = rdoc;
            }

            
    #region Web 窗体设计器生成的代码
            
    override protected void OnInit(EventArgs e)
            {
                
    //
                
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
                
    //
                InitializeComponent();
                
    base.OnInit(e);
            }

            
    /// <summary>
            
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
            
    /// 此方法的内容。
            
    /// </summary>
            private void InitializeComponent()
            {
                
    this.Load += new System.EventHandler(this.Page_Load);
            }
            
    #endregion
        }
    }
    第二种,利用DataSet绑定数据源,这种方法的好处是可以自己写SQL语句,也叫做Push模式(主动的,自定义的)。
    现在网上所有的水晶报表示例教程中全都是只能出一个表的数据。按照那些示例上所说的,如果你想使用PUSH模式在报表中显示两个表的数据,就会出现“登录失败”的问题。其实就在于,这些示例将DataSet与数据库的关系描述的很紧密,给人一种错觉,DataSet就要安排的和数据库的结构相同,其实呢,PUSH模式中的DataSet和数据库是一点关系都没有的,之所以要创建这个DataSet的原因,就是为了让你能够编辑RPT模版。最后显示出来的数据,全都是你在后台代码中调用SetDataSource给它的。与设计时的数据库没有任何关系的。
    a.新建数据集DataSet1.xds,将表拖拽到数据集选项卡中。
    b.创建空白报表文件CrystalReport1,将数据源选定为上面的DataSet1。(数据库专家--项目数据--ADO.NET数据集--DataSet1)
    c.排列报表文件数据。

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;

    namespace WebSite
    {
        
    public partial class Report : System.Web.UI.Page
        {
            //如果报表文件.rpt是"Strongly Typed",即报表文件加入到项目中了,则直接使用CrystalReport1对象;如果报表文件.rpt是"UnTyped",即没有在项目中,则要创建ReportDocument文档对象来加载该报表。

            //ReportDocument rdoc 
    = new ReportDocument();
       CrystalReport1 crpt = new CrystalReport1();
            
    protected void Page_Load(object sender, EventArgs e)
            {
                string strSql = "SELECT * FROM otagSnapr";
                SqlConnection conn = new SqlConnection("server=AKD-91CEE15B039;initial catalog=Drag;user id=tmac;pwd=13200841");
                conn.Open();
                using (SqlDataAdapter sda = new SqlDataAdapter(strSql,conn))
                {
                    DataSet1 ds = new DataSet1();
                    sda.Fill(ds, "otagSnapr");
                    crpt.SetDataSource(ds);
                    this.CrystalReportViewer1.ReportSource = crpt;
                }

            }

            
    #region Web 窗体设计器生成的代码
            
    override protected void OnInit(EventArgs e)
            {
                
    //
                
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
                
    //
                InitializeComponent();
                
    base.OnInit(e);
            }

            
    /// <summary>
            
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
            
    /// 此方法的内容。
            
    /// </summary>
            private void InitializeComponent()
            {
                
    this.Load += new System.EventHandler(this.Page_Load);
            }
            
    #endregion
        }
    }

  • 相关阅读:
    Mybaits 的优点
    mybatis中#{}和${}的区别
    springmvc工作流程
    request对象的主要方法有哪些
    如何决定选用HashMap还是TreeMap?
    队列和栈是什么,列出它们的区别?
    fail-fast与fail-safe有什么区别?
    Collections类是什么?
    哪些集合类提供对元素的随机访问?
    可以作为GC Roots的对象包括哪些
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1505488.html
Copyright © 2011-2022 走看看