水晶报表的操作有两种方式:拉模式和推模式。
一、拉模式
1、基本特点
设计时,从数据库中拖表,字段等;
运行时,则按照设计时的绑定,取数据。
2、使用方法
(1)配置服务器,选择数据库及数据源,最好选择允许保存密码;
(2)拖拉需要的数据库表,字段到报表上,编辑筛选、公式等。
3、优点
简单、方便、快捷
4、缺点
灵活性差。
允许报表时需要用户登录数据库服务器,输入用户名,密码。
二、推模式
1、基本特点
设计报表时,从XML(*.xsd文件)中获取数据库模式架构;
程序运行时,从数据集(DataSet对象)中获取源数据。
2、使用方法
(1)在VS.NET中,生成一个与报表相应的数据集,假设命名为XXXDS,则VS.NET将自动生成3个文件,分别为XXXDS.CS,XXXDS.XSD,XXXDS.XSX,将这3个文件手工添加到项目工程中去;
(2)水晶报表设计器中,选择XSD文件,数据源配置完成;
(3)拖拉需要的数据库表,字段到报表上,编辑筛选、公式等。
三、水晶报表在C#.NET(WinForm)中的使用方法
1、创建一个Form;
2、拖一个Report Viewer控件(rptViewer);
3、添加.NET的关于Crystal Report的三个引用;
4、using 这3个命名空间;
5、创建报表文档对象(rptDoc);
6、加载报表;
7、传入参数字段;
8、若为拉模式则设置与之相适应的DataSet:rptDoc.SetDataSourceCds;
9、设置rptViewer的报表文件。
示例代码:
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Windows.Forms;
using CrystalDecisions.Shared;
.
.
.
/// <summary>
/// 载入报表。
/// </summary>
/// <param name="rptViewer">报表查看器。</param>
/// <param name="dataSource">DataSet 数据源。</param>
/// <param name="rptPath">报表文件的路径。</param>
/// <returns>执行结果。</returns>
public string[] LoadReport(CrystalReportViewer rptViewer,
DataSet dataSource,
string rptPath)
{
ReportDocument rptDocument = new ReportDocument(); // 报表文档。
try
{
// 使用ReportDocument加载报表
rptDocument.Load(rptPath); // 如果路径不对会导致异常;
//最好将路径转换为绝对路径。
// 设置ReportDocument的报表数据源
rptDocument.SetDataSource(dataSource);
// 设置查看器的报表文档,让查看器显示报表。
rptViewer.ReportSource = rptDocument;
}
catch(Exception ex)
{
return new string[]{"fail", "报表[" + rptPath + "]加载失败!/r/n" +
"原因为:" + ex.Message + " /r/n " +
"调用栈:" + ex.StackTrace + " /r/n"};
}
return new string[]{"success","报表加载成功!"};
}