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">