水晶报表在VC 6.0中的使用
1.创建VC工程添加报表控件
在VC集成环境中用AppWizard新建一个MFC单文档工程,其余选项都为默认。菜单中选择Project->Add To Project->Components and Controls...弹出组件、控件选择对话框,进入Registered ActiveX Controls,选中Crystal Report Viewer Control 9.lnk,单击"Insert"按钮,确认后进入类配置对话框,按默认即可。关闭控件选择对话框完成控件的添加。
2.导入水晶报表使用的动态链接库
#import "C:\Program Files\Crystal Decisions\Report Designer Component\craxdrt9.dll" no_namespace
3.按钮Button1的事件
//水晶报表变量
IApplicationPtr m_Application;
IReportPtr m_Report;
//水晶报表控件变量,在对话框中加入该控件
CCrystalReportViewer9 m_CRViewer1;
//实例化m_Application
m_Application.CreateInstance (__uuidof(Application));
//获取m_Report变量
//staff.rpt为通过向导建立的报表文件,数据库采用SQL Server 2000
m_Report =m_Application->OpenReport ("C:\\Report1.rpt");
//设置数据库连接变量
//数据库服务器(local),数据库名ADOconn,用户名sa,密码annzai
m_Report->Database ->Tables ->Item [1]->SetLogOnInfo("(local)","ADOconn","sa","annzai");
//设置检索SQL命令
m_Report->put_SQLQueryString ((_bstr_t)"select * from info");
//不显示重复字段
m_Report->PutEnableSelectDistinctRecords (TRUE);
//设置检索条件,采用水晶报表语法,功能同设置检索SQL命令
//m_Report->PutRecordSelectionFormula((_bstr_t)"{info.userID}='2001'");
//或者m_Report->PutRecordSelectionFormula=(_bstr_t)"{info.userID}='2001'";
//m_Report->PutRecordSelectionFormula="";表示显示所有字段
//设置报表标题,在设计报表时需要插入报表标题特殊字段
m_Report->ReportTitle="学生成绩报表范例";
//设置报表作者
m_Report->PutReportAuthor("lcl");
//将m_Report与报表控件连接
m_CRViewer1.SetReportSource(m_Report);
//显示报表工具条
m_CRViewer1.SetDisplayToolbar (TRUE);
//不显示报表左边的分组树
m_CRViewer1.SetDisplayGroupTree (FALSE);
//不显示控件边框
m_CRViewer1.SetDisplayBorder (FALSE);
//刷新数据
m_CRViewer1.Refresh ();
//显示报表内容
m_CRViewer1.ViewReport();
//设置预览报表的缩放比率为75%
m_CRViewer1.Zoom(75);
/*******************分页显示代码*********************
//GH1是分组名,以此分组名来进行分页显示
m_Report->Areas->GetItem("GH1")->NewPageBefore=true;
m_CrystalReport.Refresh();
****************************************************/
/***************************************************
// 按学号分组
IDatabaseFieldDefinitionPtr NumFieldPtr=m_Report->Database->Tables->Item[1]->Fields->Item[3];
m_Report->Areas->GetItem("GH1")->GroupConditionField=NumFieldPtr;
m_CrystalReport.Refresh();
****************************************************/
/**********************排序代码*********************
// 按成绩排序
IFieldDefinitionPtr ScoreFieldPtr=m_Report->Database->Tables->Item[1]->Fields->Item[5];
if(m_Report->RecordSortFields->Count==0)
{
m_Report->RecordSortFields->Add(ScoreFieldPtr,crAscendingOrder);
}
else
{
m_Report->RecordSortFields->Item[1]->Field=ScoreFieldPtr;
}
m_CrystalReport.Refresh();
****************************************************/
/****************打印代码***************************
m_CrystalReport.SetDestination(1); ///设置输出对象是打印机
m_CrystalReport.PrintReport(); ///打印
****************************************************/