CS下在C#里调用显示水晶报表
2012-04-10 16:04
274 查看
/// <summary>
/// CS下在C#里调用显示水晶报表
/// 水晶报表在CrystalReport9中定义,数据源可以是表、视图、存储过程(最后一句必须是select语句),可以包含子报表
/// 调用实例:LoadReport(this.crystalReportViewer1,"D:\\66.rpt","kys","hrdb","sa","kys");
/// 2004-10-29 writed by 华阳
/// </summary>
/// <param name="ReportViewer">报表浏览器CrystalDecisions.Windows.Forms.CrystalReportViewer</param>
/// <param name="StrRptPaht">报表文件的路径</param>
/// <param name="StrServer">服务器</param>
/// <param name="StrDatabase">数据库</param>
/// <param name="StrUser">登陆名称</param>
/// <param name="StrPassword">密码</param>
public void LoadReport(CrystalDecisions.Windows.Forms.CrystalReportViewer ReportViewer,string StrRptPaht,
string StrServer, string StrDatabase, string StrUser, string StrPassword)
{
string StrParaName="";
string StrRptTableName="";
string StrLocation="";
ReportDocument Rpt =new ReportDocument();//表示一个报表,并且包含定义、格式化、加载、导出和打印该报表的属性和方法
SubreportObject SubRptObj;//表示放在报表中的子报表。子报表是主报表内的独立或链接的报表。
ReportDocument SubRpt;
ParameterFields ParamFields=new ParameterFields();
ParameterField ParamField ;
ParameterDiscreteValue ParamDiscreteValue;
TableLogOnInfo LogOnInfo;
try
{
//加载报表
Rpt.Load(StrRptPaht);
//报表参数的赋值****************************************************
foreach(CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition ParaFieldDef in Rpt.DataDefinition.ParameterFields )
{
//只为主报表的参数进行赋值
if(ParaFieldDef.ReportName=="")
{
StrParaName=ParaFieldDef.Name;
ParamField=new ParameterField();
ParamDiscreteValue=new ParameterDiscreteValue();
ParamField.ParameterFieldName = StrParaName;
//注:用户自定义为参数赋值!!!!!!!!!!!!!!!!!!!!!!!!!
if(StrParaName.ToLower()=="depid")
ParamDiscreteValue.Value = "dg00";
else
ParamDiscreteValue.Value = "ky0001";
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ParamField.CurrentValues.Add (ParamDiscreteValue);
ParamFields.Add (ParamField);
}
}
//******************************************************************
// 将参数字段集合放入查看器控件。
if(ParamFields.Count>0)
ReportViewer.ParameterFieldInfo = ParamFields;
//设置数据库连接参数
ConnectionInfo CnInfo = new ConnectionInfo();
CnInfo.ServerName = StrServer;
CnInfo.DatabaseName = StrDatabase;
CnInfo.UserID = StrUser;
CnInfo.Password = StrPassword;
foreach( CrystalDecisions.CrystalReports.Engine.Table DTable in Rpt.Database.Tables)
{
LogOnInfo=DTable.LogOnInfo;
LogOnInfo.ConnectionInfo=CnInfo;
DTable.ApplyLogOnInfo(LogOnInfo);
//更换服务器数据库验证
StrRptTableName=DTable.Location.Substring(DTable.Location.LastIndexOf(".") + 1);
StrLocation=StrDatabase+".dbo."+StrRptTableName;
DTable.Location=StrLocation;
}
#region 对所有子报表更换服务器数据库验证
//获取主报表的所有子报表
foreach (ReportObject obj in Rpt.ReportDefinition.ReportObjects)
{
//判断是否为子报表对象
if (obj.Kind == ReportObjectKind.SubreportObject)
{
SubRptObj = (SubreportObject) obj;
SubRpt = Rpt.OpenSubreport(SubRptObj.SubreportName);
//读取子报表的所有数据库表
foreach (CrystalDecisions.CrystalReports.Engine.Table DTable in SubRpt.Database.Tables)
{
LogOnInfo = DTable.LogOnInfo;
LogOnInfo.ConnectionInfo = CnInfo;
//加载数据库连接信息
DTable.ApplyLogOnInfo(LogOnInfo);
//更换服务器和数据库
StrRptTableName=DTable.Location.Substring(DTable.Location.LastIndexOf(".") + 1);
StrLocation=StrDatabase+".dbo."+StrRptTableName;
DTable.Location=StrLocation;
}
}
}
#endregion
//将报表赋给报表浏览器
ReportViewer.ReportSource=Rpt;
//ReportViewer.RefreshReport();
}
catch(Exception ee)
{
string StrMsg=ee.Source+ee.Message;
System.Windows.Forms.MessageBox.Show(StrMsg);
}
}
/// CS下在C#里调用显示水晶报表
/// 水晶报表在CrystalReport9中定义,数据源可以是表、视图、存储过程(最后一句必须是select语句),可以包含子报表
/// 调用实例:LoadReport(this.crystalReportViewer1,"D:\\66.rpt","kys","hrdb","sa","kys");
/// 2004-10-29 writed by 华阳
/// </summary>
/// <param name="ReportViewer">报表浏览器CrystalDecisions.Windows.Forms.CrystalReportViewer</param>
/// <param name="StrRptPaht">报表文件的路径</param>
/// <param name="StrServer">服务器</param>
/// <param name="StrDatabase">数据库</param>
/// <param name="StrUser">登陆名称</param>
/// <param name="StrPassword">密码</param>
public void LoadReport(CrystalDecisions.Windows.Forms.CrystalReportViewer ReportViewer,string StrRptPaht,
string StrServer, string StrDatabase, string StrUser, string StrPassword)
{
string StrParaName="";
string StrRptTableName="";
string StrLocation="";
ReportDocument Rpt =new ReportDocument();//表示一个报表,并且包含定义、格式化、加载、导出和打印该报表的属性和方法
SubreportObject SubRptObj;//表示放在报表中的子报表。子报表是主报表内的独立或链接的报表。
ReportDocument SubRpt;
ParameterFields ParamFields=new ParameterFields();
ParameterField ParamField ;
ParameterDiscreteValue ParamDiscreteValue;
TableLogOnInfo LogOnInfo;
try
{
//加载报表
Rpt.Load(StrRptPaht);
//报表参数的赋值****************************************************
foreach(CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition ParaFieldDef in Rpt.DataDefinition.ParameterFields )
{
//只为主报表的参数进行赋值
if(ParaFieldDef.ReportName=="")
{
StrParaName=ParaFieldDef.Name;
ParamField=new ParameterField();
ParamDiscreteValue=new ParameterDiscreteValue();
ParamField.ParameterFieldName = StrParaName;
//注:用户自定义为参数赋值!!!!!!!!!!!!!!!!!!!!!!!!!
if(StrParaName.ToLower()=="depid")
ParamDiscreteValue.Value = "dg00";
else
ParamDiscreteValue.Value = "ky0001";
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ParamField.CurrentValues.Add (ParamDiscreteValue);
ParamFields.Add (ParamField);
}
}
//******************************************************************
// 将参数字段集合放入查看器控件。
if(ParamFields.Count>0)
ReportViewer.ParameterFieldInfo = ParamFields;
//设置数据库连接参数
ConnectionInfo CnInfo = new ConnectionInfo();
CnInfo.ServerName = StrServer;
CnInfo.DatabaseName = StrDatabase;
CnInfo.UserID = StrUser;
CnInfo.Password = StrPassword;
foreach( CrystalDecisions.CrystalReports.Engine.Table DTable in Rpt.Database.Tables)
{
LogOnInfo=DTable.LogOnInfo;
LogOnInfo.ConnectionInfo=CnInfo;
DTable.ApplyLogOnInfo(LogOnInfo);
//更换服务器数据库验证
StrRptTableName=DTable.Location.Substring(DTable.Location.LastIndexOf(".") + 1);
StrLocation=StrDatabase+".dbo."+StrRptTableName;
DTable.Location=StrLocation;
}
#region 对所有子报表更换服务器数据库验证
//获取主报表的所有子报表
foreach (ReportObject obj in Rpt.ReportDefinition.ReportObjects)
{
//判断是否为子报表对象
if (obj.Kind == ReportObjectKind.SubreportObject)
{
SubRptObj = (SubreportObject) obj;
SubRpt = Rpt.OpenSubreport(SubRptObj.SubreportName);
//读取子报表的所有数据库表
foreach (CrystalDecisions.CrystalReports.Engine.Table DTable in SubRpt.Database.Tables)
{
LogOnInfo = DTable.LogOnInfo;
LogOnInfo.ConnectionInfo = CnInfo;
//加载数据库连接信息
DTable.ApplyLogOnInfo(LogOnInfo);
//更换服务器和数据库
StrRptTableName=DTable.Location.Substring(DTable.Location.LastIndexOf(".") + 1);
StrLocation=StrDatabase+".dbo."+StrRptTableName;
DTable.Location=StrLocation;
}
}
}
#endregion
//将报表赋给报表浏览器
ReportViewer.ReportSource=Rpt;
//ReportViewer.RefreshReport();
}
catch(Exception ee)
{
string StrMsg=ee.Source+ee.Message;
System.Windows.Forms.MessageBox.Show(StrMsg);
}
}
相关文章推荐
- c#调用打印机打印水晶报表
- 详解C#调用水晶报表的实现
- C#水晶报表显示sqlserver2000储存的图片 C#水晶报表动态显示sqlserver储存的图片
- 在水晶报表中实现任意选择指定字段显示-模板及C#升级版
- 水晶报表显示图片
- 无法显示水晶报表控件
- 水晶报表的调用和获取报表中的文本值(crystalReport)
- 官方水晶报表 .NET 应用程序实例下载 (C#、Visual C++.NET)
- 水晶报表不显示
- C#创建无数据源水晶报表极简教程(PUSH模式)
- 自定义水晶报表的显示
- [水晶报表小技巧-开发-4]不显示报表直接打印
- 使用eclipse在jsp上显示水晶报表(三)用sql语句过滤数据
- C#使用VS2005制作水晶报表 提示注册 解决方法
- C# 水晶报表打印 绑定数据库表
- C#调用windows的API函数实现将不活动窗口置为活动窗口,并置前显示
- 自定义水晶报表的显示
- 【水晶报表小技巧-使用-6】 控制每页显示组的数目
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式
- 水晶报表使用经验谈3--在报表中显示多个表的字段(通过表关联)