zoukankan      html  css  js  c++  java
  • asp.net水晶报表的一些问题

     
    1。第一步是添加新项CrystalReport1
    2。在CrystalReport1.rpt面页右键选择:”数据库”à”添加/删除数据库”出现下面对话框:
    然后点开OLE DB(ADO)的加号,将弹出选择数据库的对话框
    其中”项目数据”里面的”当前连接”显示的就是OLE DB(ADO)的连接,这样就可以将表添加到右边的”选定的表”中了(切记:不要既从”OLE DB” 中选表或命令又从”当前连接”中选,如果你用了数据集,也是一样的道理,否则全提示出”登陆失败”的错误!)
    3。字段资料管理器里面”数据库字段”里把字段直接拖到CrystalReport.rpt里面了.布置好布局.
    4。回到WebForm1.aspx页面,选择控件CrystalReportViewer将其放到页面上。
    5。代码
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;
    在WebForm1.aspx.cs的Form_Load里面添加代码:
    TableLogOnInfo logOnInfo = new TableLogOnInfo();
                  ReportDocument rpdMy0= new ReportDocument();
                  logOnInfo.ConnectionInfo.ServerName = "NNN";
                  logOnInfo.ConnectionInfo.Password="dong";
                  logOnInfo.ConnectionInfo.DatabaseName="Lab";
                  logOnInfo.ConnectionInfo.UserID = "sa";
     
                  String path = Server.MapPath("CrystalReport2.rpt");
                  rpdMy0.Load(path);
                  rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
                  CrystalReportViewer1.ReportSource = rpdMy0;
    其中:
    TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.
    或者,获得数据库的方法改为直接从数据库获得DataSet
    using System.Data.SqlClient;
    using System.Collections.Specialized;
    string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();
       using (SqlConnection conn = new SqlConnection(strConn))
       {
           SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"
           DataSet ds=new DataSet();
           da.Fill( ds);
           CrystalReport1 cr1 = new CrystalReport1();
           cr1.SetDataSource( ds);
           CrystalReportViewer1.ReportSource = cr1;
       }
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;
    在WebForm1.aspx.cs的Form_Load里面添加代码:
    TableLogOnInfo logOnInfo = new TableLogOnInfo();
                  ReportDocument rpdMy0= new ReportDocument();
                  logOnInfo.ConnectionInfo.ServerName = "NNN";
                  logOnInfo.ConnectionInfo.Password="dong";
                  logOnInfo.ConnectionInfo.DatabaseName="Lab";
                  logOnInfo.ConnectionInfo.UserID = "sa";
     
                  String path = Server.MapPath("CrystalReport2.rpt");
                  rpdMy0.Load(path);
                  rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
                  CrystalReportViewer1.ReportSource = rpdMy0;
    其中:
    TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.
    或者,获得数据库的方法改为直接从数据库获得DataSet
    using System.Data.SqlClient;
    using System.Collections.Specialized;
    string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();
       using (SqlConnection conn = new SqlConnection(strConn))
       {
           SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"
           DataSet ds=new DataSet();
           da.Fill( ds);
           CrystalReport1 cr1 = new CrystalReport1();
           cr1.SetDataSource( ds);
           CrystalReportViewer1.ReportSource = cr1;
       }
    using CrystalDecisions.Shared;
    using CrystalDecisions.CrystalReports.Engine;
    在WebForm1.aspx.cs的Form_Load里面添加代码:
    TableLogOnInfo logOnInfo = new TableLogOnInfo();
                  ReportDocument rpdMy0= new ReportDocument();
                  logOnInfo.ConnectionInfo.ServerName = "NNN";
                  logOnInfo.ConnectionInfo.Password="dong";
                  logOnInfo.ConnectionInfo.DatabaseName="Lab";
                  logOnInfo.ConnectionInfo.UserID = "sa";
     
                  String path = Server.MapPath("CrystalReport2.rpt");
                  rpdMy0.Load(path);
                  rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
                  CrystalReportViewer1.ReportSource = rpdMy0;
    其中:
    TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.
    或者,获得数据库的方法改为直接从数据库获得DataSet
    using System.Data.SqlClient;
    using System.Collections.Specialized;
    string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();
       using (SqlConnection conn = new SqlConnection(strConn))
       {
           SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"
           DataSet ds=new DataSet();
           da.Fill( ds);
           CrystalReport1 cr1 = new CrystalReport1();
           cr1.SetDataSource( ds);
           CrystalReportViewer1.ReportSource = cr1;
       }
    如果你用的是水晶报表的推模式,一般不用设置登陆信息,但是要这样写:obj.SetDataSource(this.ds.Tables["tablename"]);如果你写成了obj.SetDataSource(this.ds)就会有登陆框的。

    如果你用的是水晶报表的拉模式,你就一定要写上登陆信息:
    crReportDocument = new OracleReport();
       //Set the crConnectionInfo with the current values stored in the report
       crConnectionInfo = crReportDocument.Database.Tables[0].LogOnInfo.ConnectionInfo;
       /* Populate the ConnectionInfo Objects Properties with the appropriate values for
       the ServerName, User ID, Password and DatabaseName. However, since Oracle
       works on Schemas, Crystal Reports does not recognize or store a DatabaseName.
       Therefore, the DatabaseName property must be set to a BLANK string. */
       crConnectionInfo.DatabaseName = "";
       crConnectionInfo.ServerName = "Your Server Name";
       crConnectionInfo.UserID = "Your User ID";
       crConnectionInfo.Password = "Your Password";
       //Set the CrDatabase Object to the Report's Database
       crDatabase = crReportDocument.Database;
       //Set the CrTables object to the Tables collection of the Report's dDtabase
       crTables = crDatabase.Tables;
       //Loop through each Table object in the Tables collection and apply the logon info
       //specified ealier. Note this sample only has one table so the loop will only execute once
       foreach (Table crTable in crTables)
       {
        crTableLogOnInfo = crTable.LogOnInfo;
        crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
        crTable.ApplyLogOnInfo (crTableLogOnInfo);
        // if you wish to change the schema name as well, you will need to set Location property as follows:
        // crTable.Location = "<new schema name>." + crTable.Name;
       }
       //Set the ReportSource of the CrystalReportViewer to the strongly typed Report included in the project
       crystalReportViewer1.ReportSource = crReportDocument;

    还有一点要注意:
    如果你用到了子报表,一定要处理:
    //Go through each sections in the main report and identify the subreport by name
       crSections = crReportDocument.ReportDefinition.Sections;
       foreach(Section crSection in crSections)
       {
        crReportObjects = crSection.ReportObjects;
        //loop through all the report objects to find all the subreports
        foreach(ReportObject crReportObject in crReportObjects)
        {
         if (crReportObject.Kind == ReportObjectKind.SubreportObject)
         {
          //you will need to typecast the reportobject to a subreport
          //object once you find it
          crSubreportObject = (SubreportObject)crReportObject;
          //open the subreport object
          crSubReportDoc = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);
          //Once the correct subreport has been located pass it the
          //appropriate dataset
          if(crSubReportDoc.Name == "FirstSub")
          {
           //crSubReportDoc.Database.Tables[0].SetDataSource(ds);
           crSubReportDoc.SetDataSource(ds);
          }
         }
        }
       }
       crystalReportViewer1.ReportSource = crReportDocument;
    同样crSubReportDoc.SetDataSource(ds);改为:crSubReportDoc.SetDataSource(ds.Tables["tablename"]);
     
    作者: XuGang   网名:钢钢
    出处: http://xugang.cnblogs.com
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    [Winform]Media Player com组件应用中遇到的问题
    [Winform]Media Player播放控制面板控制,单击事件截获
    [Winform]Media Player组件全屏播放的设置
    [EF]数据上下文该如何实例化?
    [Winform]在关闭程序后,托盘不会消失的问题
    咏南中间件跨平台解决方案
    硬件中间件
    BASE64使用场景
    DELPHI7 ADO二层升三层新增LINUX服务器方案
    NGINX心跳检测
  • 原文地址:https://www.cnblogs.com/xugang/p/892037.html
Copyright © 2011-2022 走看看