您的位置:首页 > 编程语言 > ASP

水晶报表(CrystalReports)的简单应用(ASP.NET)

2012-12-13 22:38 706 查看
Visual studio 2008 自带水晶报表10
ASP.NET网站中的简单应用
本次示例目的只是让刚接触水晶报表的朋友掌握其应用,因此示例以简单,简洁,清晰为主,没有连接后台数据库。
Visual studio 2008新建asp.net网站CrystalReportsDemo如图:



右击项目——>添加引用:



添加一个实体类DemoModel.cs
本网站没有采用任何开发模式,所以类代码应该放到asp.net文件夹App_Code里,
可以先在项目里新建此文件夹,也可以在添加类时根据系统提示新建:



DemoModel.cs的内容如下:

[csharp]
view plaincopy

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
///DemoModel 一个实体对象
/// </summary>
public class DemoModel
{
public DemoModel()
{ }
public DemoModel(string id,string name)
{
this.id = id;
this.name = name;
}
private string id;//编码

public string Id
{
get { return id; }
set { id = value; }
}
private string name;//名称

public string Name
{
get { return name; }
set { name = value; }
}
}

右击项目——>添加新项——>Crystal报表

命名为:CrystalReport.rpt 确定后会自动弹出以下提示:

创建新的Crystal Report 文档有三种选择:



可以选择空报表然后在打开的报表中右键——>报表专家(效果一样),

默认使用报表向导,选择专家为标准(一般就会用到),点击确定



项目数据——>.Net对象

看到刚才添加的实体对象DemoModel.cs当然这只是数据源的一种

注:上面这个实体类和水晶报表文件属同一程序集可以找到,当网站采用N层模式开发时,

实体类另为一程序集,在这里就不能这样找到了,可以采取别的数据源

选中DemoModel 添加到右侧如下图:



点击下一步对报表具体要显示的字段进行设置



这里自己定义报表格式,直接点击完成



左侧可以看到上面有报表头,页眉,详细资料,报表尾,页脚这些都为设计报表格式提供方便,在相应区域点击

右键可以对其进行设置,当会应用水晶报表之后可以尝试,在这里我们只对详细资料区,进行简单设置从右侧,字段资源管理器

数据库字段,找到刚才添加的数据源DemoModel,可以看到对象的属性,将要显示的字段拖到左侧 详细资料区如图:



当然这里的显示的样式可以自己定义,大家可以尝试,右键有很多操作此报表涉及到参数,在右侧字段资源管理器

参数字段(右击)——新建:



点击确定(参数字段中添加一个参数args_1),按上述方法再同样添加一个参数args_2 如图:



在报表里要显示从外部传过来的两个参数值,现在将参数字段中的两个参数拖到报表的页眉区:



在页眉区的显示的id,name字段是报表的表头,我们可以自己定义名称,右击——>编辑文本对象(改名):



到此对报表的设置完成,保存,关闭水晶报表窗口

这时项目目录如图:



下面在页面Default.aspx中显示刚刚设计的水晶报表

从工具箱报表一栏中拖一个可以显示水晶报表的控件

CrystalReportViewer其它工作都可以不做,

Default.aspx页面内的代码如下:

[html]
view plaincopy

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" />
</div>
</form>
</body>
</html>

Default.aspx.cs页面后置类的内容如下:

[csharp]
view plaincopy

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

//引入命名空间
//用到List,并且有泛型
using System.Collections;
using System.Collections.Generic;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//创建报表文档
ReportDocument myReport = new ReportDocument();
//取到报表文件物理路径
string reportPath = Server.MapPath("~/CrystalReport.rpt");
//加载报表文件
myReport.Load(reportPath);

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/*报表显示需要的参数,这里我们是自己定义两个参数根据参数 */
string args_1 = "第一个参数";
string args_2 = "第二个参数";
//将定义好的两个外部参数传入报表

ParameterFields paramFields = new ParameterFields();

ParameterField pargs_1 = new ParameterField();
ParameterField pargs_2 = new ParameterField();
// 设置在报表中,将要接受的参数字段的名称
pargs_1.ParameterFieldName = "args_1";
pargs_2.ParameterFieldName = "args_2";

ParameterDiscreteValue pdargs_1 = new ParameterDiscreteValue();
ParameterDiscreteValue pdargs_2= new ParameterDiscreteValue();

pdargs_1.Value = args_1;
pdargs_2.Value = args_2;

pargs_1.CurrentValues.Add(pdargs_1);
pargs_2.CurrentValues.Add(pdargs_2);

paramFields.Add(pargs_1);
paramFields.Add(pargs_2);

// 将参数集合绑定到报表浏览控件
this.CrystalReportViewer1.ParameterFieldInfo = paramFields;
//参数设置完成
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

//***************************************************************
/*由于没有连接数据库,所以我们为了显示效果来自己添加一个数据源
在报表中我们用到了实体对象,在这里我们自己手动加入以下几个对象
并装入一个List集合中,当然以后要是连接数据库也是主要修改数据源
其它不用太大改动*/
DemoModel dm1 = new DemoModel("10001","demo1");
DemoModel dm2 = new DemoModel("10002", "demo2");
DemoModel dm3 = new DemoModel("10003", "demo3");
DemoModel dm4 = new DemoModel("10004", "demo4");
List<DemoModel> dmList = new List<DemoModel>();
dmList.Add(dm1);
dmList.Add(dm2);
dmList.Add(dm3);
dmList.Add(dm4);
//至此数据源对象添加完毕
//*****************************************************************

//为新的报表文档设置数据源
myReport.SetDataSource(dmList);
//将创建的新的报表文档绑定
this.CrystalReportViewer1.ReportSource = myReport;
this.CrystalReportViewer1.DataBind();
}
}

以实体对象为水晶报表数据源

加入参数的开发方式完毕,编译运行后可以得到如下效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: