All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
利用GridView显示主细表并一次编辑明细表所有数据的例子_[Asp.Net教程]
配置文件中PHP最常用四个ini函数_[PHP教程]
修改Zend引擎实现PHP源码加密的原理及实践_php资料_编程技术
ASP.NET,Atlas,ListView显示列表数据_[Asp.Net教程]
用PHP实现文件上传_php资料_编程技术
测试,Apache,Web,和,PHP,应用程序服务器_php资料_编程技术
asp.net,2.0中使用OWC组件学习小结_[Asp.Net教程]
C#简介-,类和对象_[Asp.Net教程]
ASP.NET入门随想之检票的老太太_[Asp.Net教程]
防网站登陆被破解的简单方法_[Asp.Net教程]
Reading number is top 10 pictures
这张图有两句话,你看出来了吗?
乳娘帕梅拉安德森5
看到这名字我也是醉了。。。。。。
Shandong jinan is about to dismantle a one hundred-year history of the building
Group of female porn in 《westwards》, uninhibited woman threatened to not the bottom line1
Angie Chiu vijara myth1
In the world the most mysterious 21 place landscape3
The money of more than 100 countries and regions16
Small QiShu -- ShuangShuangPan1
擦地板的大叔太好了
Download software ranking
Wild things 2
尖东毒玫瑰A
C#与.NET技术平台实战演练
Proficient in JavaScript
Jinling thirteen stock
Sora aoi, the maid, students' uniforms
Tram sex maniac 2 (H) rar bag16
Boxer Classic video1
Such love down(擒爱记)
WebService在.NET中的实战应用教学视频 → 第4集
delv published in(发表于) 2014/1/27 6:51:39 Edit(编辑)
水晶报表的制作(图表)_[Asp.Net教程]

水晶报表的制作(图表)_[Asp.Net教程]

水晶报表的制作(图表)_[Asp.Net教程]

  在这个例子中,我们设想的应用要为一个销售部门制作一份报表,管理者可以查看某段时间之内的销售情况,以列表或者折线图的形式反映出销售的趋势。我们将使用SQL Server 2000做为数据库,使用VB.NET编写中间层逻辑层,而前端的表示层使用C#。我们先来看下数据库的结构。


其中,tbitem表中存放的是每张订单中所订购的货品,tbsales存放的是每张订单,tblsalesperson是销售员表,存放该出版社的每位销售员。

接下来,使用SQL Server 2000来创建这些表。表的结构如下所示:

CREATE TABLE [dbo].[tblItem] (
[ItemId] [int] NOT NULL ,
[Description] [varchar] (50) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[tblSalesPerson] (
[SalesPersonId] [int] NOT NULL ,
[UserName] [varchar] (50) NOT NULL ,
[Password] [varchar] (30) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[tblSales] (
[SaleId] [int] IDENTITY (1, 1) NOT NULL ,
[SalesPersonId] [int] NOT NULL ,
[ItemId] [int] NOT NULL ,
[SaleDate] [datetime] NOT NULL ,
[Amount] [int] NOT NULL
) ON [PRIMARY]



并且用以下的代码创建表之间的约束关系。


ALTER TABLE tblItem
ADD CONSTRAINT PK_ItemId
PRIMARY KEY (ItemId)
GO
ALTER TABLE tblSalesPerson
ADD CONSTRAINT PK_SalesPersonId
PRIMARY KEY (SalesPersonId)
GO
ALTER TABLE tblSales
ADD CONSTRAINT FK_ItemId
FOREIGN KEY (ItemId) REFERENCES tblItem(ItemId)
GO
ALTER TABLE tblSales
ADD CONSTRAINT FK_SalesPersonId
FOREIGN KEY (SalesPersonId) REFERENCES tblSalesPerson(SalesPersonId)
GO


创建中间逻辑层

在中间逻辑层组件中,我们为每一张表都创建两个类。比如,对于tblItems表,创建item 和items类。Item类中记录每件销售的货品的详细情况,而items表则记录所有销售的货品并且有增加货品的方法。这样,就存在下面的六个类: 



  • Item and Items
  • SalesPerson and SalesPersons
  • Sale and Sales


接下来,看一下每个类中的属性:

Item类包括如下属性



  • ItemId (货品id编号)
  • Description (货品的描述)
  • Items


有一个方法,将根据item的编号返回一个item对象

Public Function GetAllItems () As Collections.ArrayList

SalesPerson该类有以下三个属性:



  • SalesPersonId (销售员编号)
  • Name (姓名)
  • Password (密码)


SalesPersons 有一个方法,根据销售员登陆时输入的用户名和密码,在数据库中,验证销售员的登陆是否正确,如果正确,则返回零。


Public Function ValidateUser (strUserName as String, strPassword as String) As Integer



Sale 有如下5个属性



  • SaleId
  • SalesPersonId
  • ItemId
  • SaleDate
  • Amount


Sales有两个方法,其中getsales根据输入的参数返回sales对象的集合

Public Function GetSales (Optional nSaleId As Integer = 0, Optional nSalesPersonId As Integer = 0, Optional nItemId As Integer = 0) As Collections.ArrayList


还有一个addsales方法,用于增加一张订单

复制 保存Public Function AddSale (objSale As Sale)


创建表现层页面

接下来,开始创建表现层页面。首先,要创建一个可以给销售员登陆的页面,如下图所示。



在销售员成功登陆后,可以给销售员输入某样货品销售的数量,如下图:


设计家园 收集整理

此外,为了给业务主管看到某个时期的销售情况,创建如下页面。



其中,业务主管可以选择查看某样货品在某个时期(选择开始日期,结束日期)的销售情况,以图表方式显示。

这里特别值得一提的是,日历控件的使用。在页面中放置日历控件后,设置如下代码:


onclick="Page_ValidationActive=false;" src="datepicker.gif" alt="" runat="server" onserverclick="ShowCal1" id="ImgCal1" name="ImgCal1">

这里设置page_validationactive参数为false,所以不需要重新提交页面,并且,在onserverclick事件中,设置处理的代码,如下所示:

public void ShowCal1(Object sender, System.Web.UI.ImageClickEventArgs e)
{
//显示日历控件
DtPicker1.Visible = true;
}

当用户选择了相关的日期后,在文本框中可以获得相关的日期:
private void DtPicker1_SelectionChanged(object sender, System.EventArgs e)
{
txtStartDate.Text = DtPicker1.SelectedDate.ToShortDateString();
DtPicker1.Visible = false;
}
在提交的页面中,处理的代码如下:
private void bSubmit_ServerClick(object sender, System.EventArgs e)
{
Response.Redirect("ViewReport.aspx?ItemId=" + cboItemType.SelectedItem.Value
+ "&StartDate=" + txtStartDate.Text + "&EndDate=" + txtEndDate.Text);
}
在提交页面后,将跳转到浏览报表的页面viewreport.aspx,传入相关的参数,如货品ID,开始和结束日期。



用水晶报表创建报表


首先,往窗体中添加水晶报表控件,之后,就可以用水晶报表的报表设计器设计一份报表了。新建一个水晶报表文件类型,命名为itemreport.rpt,接着使用报表设计专家,并选择设计标准型的报表,点下一步,出现如下画面:



我们选择使用ADO类型的数据,在弹出的窗口中,设置好sql server的登陆名,登陆密码,选择好数据库后,选择在报表中使用tblsales表,如下图:



接着选Next,在要在报表中显示的字段中,选择SaleDate和Amount。之后,一直选NEXT,忽略其他相关设置,最后,在图表类型中选择折线图,如下图:


设计家园 收集整理

最后点击finish,可以看到如下的报表:



再次选择报表专家,在弹出的窗口中选择数据页,在数据可用字段中选择salesdate,并且可以在文本页中,设置适当的报表标题。



由于要根据输入的日期,货品参数来动态显示报表,因此我们要设置参数字段。在报表设计器中,在字段资源管理器中,选择参数字段,鼠标右击选择“新建”,新建如下三个参数字段。

名称
类型
ItemId
Number
StartDate
Date
EndDate
Date

最后,要设置相关的查询公式,在除报表页眉的区域,鼠标右键点击,在弹出菜单中选择“报表|编辑选择公式|记录”,输入如下的公式:


设计家园 收集整理

在上面的公式编辑器中,分为左中右三部分,左边的是报表的字段,中间的是相关的功能函数,最右边的是运算符,双击其中选中的部分,则可以添加到下部的公式显示区域中。最后,保存建立的公式。


在程序中使用报表

接下来,我们可以在程序中用代码处理和报表的连接过程。首先,在工程项目中,增加如下的两个命名空间的引用(注意,在代码中也必须用using引入它们):



  • CrystalDecisions.CrystalReports.Engine
  • CrystalDecisions.Shared


在viewreport.aspx的Page_load事件中,加入以下代码


//接收传递的参数
nItemId = int.Parse(Request.QueryString.Get("ItemId"));
strStartDate = Request.QueryString.Get("StartDate");
strEndDate = Request.QueryString.Get("EndDate");
//声明报表的数据对象
CrystalDecisions.CrystalReports.Engine.Database crDatabase;
CrystalDecisions.CrystalReports.Engine.Table crTable;
TableLogOnInfo dbConn = new TableLogOnInfo();
// 创建报表对象opt
ReportDocument oRpt = new ReportDocument();
// 加载已经做好的报表
oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");
//连接数据库,获得相关的登陆信息
crDatabase = oRpt.Database;
//定义一个arrtables对象数组
object[] arrTables = new object[1];
crDatabase.Tables.CopyTo(arrTables, 0);
crTable = (CrystalDecisions.CrystalReports.Engine.Table) arrTables[0];
dbConn = crTable.LogOnInfo;
//设置相关的登陆数据库的信息
dbConn.ConnectionInfo.DatabaseName = "WroxSellers";
dbConn.ConnectionInfo.ServerName = "localhost";
dbConn.ConnectionInfo.UserID = "sa";
dbConn.ConnectionInfo.Password = "test";
//将登陆的信息应用于crtable表对象
crTable.ApplyLogOnInfo(dbConn);
//将报表和报表浏览控件绑定
crViewer.ReportSource = oRpt;
//传递参数
setReportParameters();
在上面的代码中,首先接收了日期,货品编号等参数,并实例化了Database, Table和 TableLogOnInfo 三个类,它们是用来在运行时,建立报表和数据库的连接必需的。再使用
oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");
来装载已经做好了的报表。


在装载完报表后,将数据库中要使用的表复制到一个对象数组中去,并选择对象数组中的第一个表元素,将其转换为水晶报表的报表对象。接着,再设置LOGONINFO中的登陆数据库的信息。最后,将报表源与报表浏览控件绑定。



传递参数到水晶报表

定义一个新的过程,setReportParameters(),代码如下:


private void setReportParameters()
{
// all the parameter fields will be added to this collection
ParameterFields paramFields = new ParameterFields();
// the parameter fields to be sent to the report
ParameterField pfItemId = new ParameterField();
ParameterField pfStartDate = new ParameterField();
ParameterField pfEndDate = new ParameterField();
// 设置在报表中,将要接受的参数字段的名称
pfItemId.ParameterFieldName = "ItemId";
pfStartDate.ParameterFieldName = "StartDate";
pfEndDate.ParameterFieldName = "EndDate";
ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();
ParameterDiscreteValue dcStartDate = new ParameterDiscreteValue();
ParameterDiscreteValue dcEndDate = new ParameterDiscreteValue();
dcItemId.Value = nItemId;
dcStartDate.Value = DateTime.Parse(strStartDate);
dcEndDate.Value = DateTime.Parse(strEndDate);
pfItemId.CurrentValues.Add(dcItemId);
pfStartDate.CurrentValues.Add(dcStartDate);
pfEndDate.CurrentValues.Add(dcEndDate);
paramFields.Add(pfItemId);
paramFields.Add(pfStartDate);
paramFields.Add(pfEndDate);
// 将参数集合绑定到报表浏览控件
crViewer.ParameterFieldInfo = paramFields;
}
现在来解释一下上面的代码。在水晶报表中,浏览器控件有一个属性parameterfieldsinfo,该属性可以通过绑定parameterfields类型的集合,将相关的参数的实际数值传递到报表。Parameterfields类型集合通过add的方法,接收Parameterfield类型的对象。因此,我们先为itemid,startdate,enddate三个参数创建parameterfield类型的对象,并且设置它们对应报表中接受参数的名称:
ParameterFields paramFields = new ParameterFields();
ParameterField pfItemId = new ParameterField();
ParameterField pfStartDate = new ParameterField();
ParameterField pfEndDate = new ParameterField();
// 设置在报表中,将要接受的参数字段的名称
pfItemId.ParameterFieldName = "ItemId";
pfStartDate.ParameterFieldName = "StartDate";
pfEndDate.ParameterFieldName = "EndDate";
接着,可以为这些参数字段设置具体的值了,但由于parameterfield必须接受P arameterDiscreteValue类型的对象,所以,再创建相关的实例:
ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();
ParameterDiscreteValue dcStartDate = new ParameterDiscreteValue();
ParameterDiscreteValue dcEndDate = new ParameterDiscreteValue();
dcItemId.Value = nItemId;
dcStartDate.Value = DateTime.Parse(strStartDate);
dcEndDate.Value = DateTime.Parse(strEndDate);
最后,就可以在三个parameterfield的对象中的currentvalues中设置它们的值,并往paramFields集合中加进这三个parameterfield对象。


运行的结果如下。



本程序在VS.NET 2003,crystal report 9以上版本可以正确运行。

设计家园 收集整理







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.