[转贴]水晶报表数据填充(一种推模式,两种拉模式)类库
#region 声明
//----------------------------------------------------------------------
//
//
// 作者: 李淼(Nick.Lee)
//
// 水晶报表数据填充(一种推模式,两种拉模式)类库//
//
// boyorgril@msn.com
//
//----------------------------------------------------------------------
#endregion
#region 数据填充水晶报表函数集合
/// <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,并在水晶报表中显示相关数据字段*/
}
/// <summary>
/// 使用ReportDocument填充CrystalReport,为oleDB,odbc使用,此例子为sqlserver,拉模式
/// </summary>
/// <param name="SeverName">服务器名称</param>
/// <param name="DatabaseName">数据库名称</param>
/// <param name="UserID">用户id</param>
/// <param name="Password">用户密码</param>
/// <param name="fileName">获取指定路径的水晶报表文件名称</param>
/// <param name="sender">水晶报表ReportDocument对象</param>
public void cryDocumentFill(string SeverName,string DatabaseName,string UserID,string Password,string fileName,ReportDocument sender)
{
string path = System.Web.HttpContext.Current.Server.MapPath(fileName);
sender.Load(path);
TableLogOnInfo crTableLogOnInfo = new TableLogOnInfo();
crTableLogOnInfo.ConnectionInfo.ServerName = SeverName;
crTableLogOnInfo.ConnectionInfo.Password=Password;
crTableLogOnInfo.ConnectionInfo.DatabaseName=DatabaseName;
crTableLogOnInfo.ConnectionInfo.UserID =UserID;
//设置连接参数
//ReportDocument装载路径
sender.Database.Tables[0].ApplyLogOnInfo(crTableLogOnInfo);
//设置对应表连接参数
//使用命名空间
//using CrystalDecisions.CrystalReports.Engine;
//using CrystalDecisions.Shared;
/*注意:使用Engine.Database填充必须先在水晶报表中设置相关数据字段*/
// 申明公共类型,例如:
//public printClass print1=new printClass();
//public ReportDocument RD1= new ReportDocument();
//然后调用
//print1.cryDocumentFill("10.141.165.136","Northwind","sa","sa","Customers","*.rpt",RD1);
//CrystalReportViewer1.ReportSource = RD1;
//CrystalReportViewer1.DataBind();
}
#endregion