偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

實(shí)例講解:ASP.NET水晶報表教程

開發(fā) 后端
本文以一個三層結(jié)構(gòu)的ASP.NET程序?yàn)槔榻B如何使用crystalreport來制作一份報表的ASP.NET水晶報表教程,其中著重介紹用ASP.NET水晶報表創(chuàng)建圖表的技巧。

報表是應(yīng)用程序中不可缺少的部分,一張好的報表,能直觀地讓人把握數(shù)據(jù)的情況,對決策起到重要作用。那么,如果才能更快捷、更高效地實(shí)現(xiàn)報表呢?本文以一個三層結(jié)構(gòu)的ASP.NET程序?yàn)槔?,介紹如何使用crystalreport,來制作一份報表,其中介紹了不少ASP.NET水晶報表的技巧。

在這個例子中,我們設(shè)想的應(yīng)用要為一個銷售部門制作一份報表,管理者可以查看某段時間之內(nèi)的銷售情況,以列表或者折線圖的形式反映出銷售的趨勢。我們將使用SQLServer 2000做為數(shù)據(jù)庫,使用VB.NET編寫中間層邏輯層,而前端的表示層使用C#。

介紹ASP.NET水晶報表教程之前,我們先來看下數(shù)據(jù)庫的結(jié)構(gòu)。

實(shí)例講解:ASP.NET水晶報表教程之?dāng)?shù)據(jù)庫結(jié)構(gòu)

其中,tbitem表中存放的是每張訂單中所訂購的貨品,tbsales存放的是每張訂單,tblsalesperson是銷售員表,存放該出版社的每位銷售員。

接下來,使用SQLServer 2000來創(chuàng)建這些表。表的結(jié)構(gòu)如下所示:

  1. CREATETABLE[dbo].[tblItem](  
  2. [ItemId][int]NOTNULL,  
  3. [Description][varchar](50)NOTNULL  
  4. )ON[PRIMARY]  
  5. CREATETABLE[dbo].[tblSalesPerson](  
  6. [SalesPersonId][int]NOTNULL,  
  7. [UserName][varchar](50)NOTNULL,  
  8. [Password][varchar](30)NOTNULL  
  9. )ON[PRIMARY]  
  10. CREATETABLE[dbo].[tblSales](  
  11. [SaleId][int]IDENTITY(1,1)NOTNULL,  
  12. [SalesPersonId][int]NOTNULL,  
  13. [ItemId][int]NOTNULL,  
  14. [SaleDate][datetime]NOTNULL,  
  15. [Amount][int]NOTNULL  
  16. )ON[PRIMARY

并且用以下的代碼創(chuàng)建表之間的約束關(guān)系。

  1. ALTERTABLEtblItem  
  2. ADDCONSTRAINTPK_ItemId  
  3. PRIMARYKEY(ItemId)  
  4. GO  
  5. ALTERTABLEtblSalesPerson  
  6. ADDCONSTRAINTPK_SalesPersonId  
  7. PRIMARYKEY(SalesPersonId)  
  8. GO  
  9. ALTERTABLEtblSales  
  10. ADDCONSTRAINTFK_ItemId  
  11. FOREIGNKEY(ItemId)REFERENCEStblItem(ItemId)  
  12. GO  
  13. ALTERTABLEtblSales  
  14. ADDCONSTRAINTFK_SalesPersonId  
  15. FOREIGNKEY(SalesPersonId)REFERENCEStblSalesPerson(SalesPersonId)  
  16. GO 

ASP.NET水晶報表教程之創(chuàng)建中間邏輯層

在中間邏輯層組件中,我們?yōu)槊恳粡埍矶紕?chuàng)建兩個類。比如,對于tblItems表,創(chuàng)建item和items類。Item類中記錄每件銷售的貨品的詳細(xì)情況,而items表則記錄所有銷售的貨品并且有增加貨品的方法。這樣,就存在下面的六個類:

  Item and Items
  SalesPerson and SalesPersons
  Sale and Sales

接下來,看一下每個類中的屬性:

Item類

包括如下屬性
    ItemId (貨品id編號)
    Description (貨品的描述)
    Items

有一個方法,將根據(jù)item的編號返回一個item對象

    PublicFunctionGetAllItems()AsCollections.ArrayList

SalesPerson

該類有以下三個屬性:
    SalesPersonId(銷售員編號)
    Name(姓名)
    Password(密碼)

SalesPersons

有一個方法,根據(jù)銷售員登陸時輸入的用戶名和密碼,在數(shù)據(jù)庫中,驗(yàn)證銷售員的登陸是否正確,如果正確,則返回零。

    PublicFunctionValidateUser(strUserNameasString,strPasswordasString)AsInteger

Sale

有如下5個屬性
    SaleId
    SalesPersonId
    ItemId
    SaleDate
    Amount

Sales

有兩個方法,其中g(shù)etsales根據(jù)輸入的參數(shù)返回sales對象的集合

    PublicFunctionGetSales(OptionalnSaleIdAsInteger=0,OptionalnSalesPersonIdAsInteger=0,OptionalnItemIdAsInteger=0)AsCollections.ArrayList

還有一個addsales方法,用于增加一張訂單

    PublicFunctionAddSale(objSaleAsSale)

#p#

ASP.NET水晶報表教程之創(chuàng)建表現(xiàn)層頁面

接下來,開始創(chuàng)建表現(xiàn)層頁面。首先,要創(chuàng)建一個可以給銷售員登陸的頁面,如下圖所示。

實(shí)例講解:ASP.NET水晶報表教程之表現(xiàn)層頁面一

在銷售員成功登陸后,可以給銷售員輸入某樣貨品銷售的數(shù)量,如下圖:

此外,為了給業(yè)務(wù)主管看到某個時期的銷售情況,創(chuàng)建如下頁面。

實(shí)例講解:ASP.NET水晶報表教程之表現(xiàn)層頁面三

其中,業(yè)務(wù)主管可以選擇查看某樣貨品在某個時期(選擇開始日期,結(jié)束日期)的銷售情況,以圖表方式顯示。

這里特別值得一提的是,日歷控件的使用。在頁面中放置日歷控件后,設(shè)置如下代碼:

  1. <inputtype="image"onclick="Page_ValidationActive=false;"src="datepicker.gif"alt="ShowCalender"runat="server"onserverclick="ShowCal1"id="ImgCal1"name="ImgCal1"> 

這里設(shè)置page_validationactive參數(shù)為false,所以不需要重新提交頁面,并且,在onserverclick事件中,設(shè)置處理的代碼,如下所示:

 

  1. publicvoidShowCal1(Objectsender,System.Web.UI.ImageClickEventArgse)  
  2. {//顯示日歷控件  
  3. DtPicker1.Visible=true;  

當(dāng)用戶選擇了相關(guān)的日期后,在文本框中可以獲得相關(guān)的日期:

  1. privatevoidDtPicker1_SelectionChanged(objectsender,System.EventArgse)  
  2. {  
  3. txtStartDate.Text=DtPicker1.SelectedDate.ToShortDateString();  
  4. DtPicker1.Visible=false;  

在提交的頁面中,處理的代碼如下:

  1. privatevoidbSubmit_ServerClick(objectsender,System.EventArgse)  
  2. {  
  3. Response.Redirect("ViewReport.aspx?ItemId="+cboItemType.SelectedItem.Value+"&StartDate="+txtStartDate.Text+"&EndDate="+txtEndDate.Text);} 

在提交頁面后,將跳轉(zhuǎn)到瀏覽報表的頁面viewreport.aspx,傳入相關(guān)的參數(shù),如貨品ID,開始和結(jié)束日期。

ASP.NET水晶報表教程之創(chuàng)建報表

首先,往窗體中添加水晶報表控件,之后,就可以用水晶報表的報表設(shè)計器設(shè)計一份報表了。新建一個水晶報表文件類型,命名為itemreport.rpt,接著使用報表設(shè)計專家,并選擇設(shè)計標(biāo)準(zhǔn)型的報表,點(diǎn)下一步,出現(xiàn)如下畫面:

實(shí)例講解:ASP.NET水晶報表教程之選擇數(shù)據(jù)庫

我們選擇使用ADO類型的數(shù)據(jù),在彈出的窗口中,設(shè)置好sqlserver的登陸名,登陸密碼,選擇好數(shù)據(jù)庫后,選擇在報表中使用tblsales表,如下圖:

實(shí)例講解:ASP.NET水晶報表教程之選擇報表

接著選Next,在要在報表中顯示的字段中,選擇SaleDate和Amount。之后,一直選NEXT,忽略其他相關(guān)設(shè)置,***,在圖表類型中選擇折線圖,如下圖:

***點(diǎn)擊finish,可以看到如下的報表:

實(shí)例講解:ASP.NET水晶報表教程之圖標(biāo)類型

再次選擇報表專家,在彈出的窗口中選擇數(shù)據(jù)頁,在數(shù)據(jù)可用字段中選擇salesdate,并且可以在文本頁中,設(shè)置適當(dāng)?shù)膱蟊順?biāo)題。

實(shí)例講解:ASP.NET水晶報表教程之創(chuàng)建報表

由于要根據(jù)輸入的日期,貨品參數(shù)來動態(tài)顯示報表,因此我們要設(shè)置參數(shù)字段。在報表設(shè)計器中,在字段資源管理器中,選擇參數(shù)字段,鼠標(biāo)右擊選擇“新建”,新建如下三個參數(shù)字段。

名稱: 類型:
ItemId Number
StartDate Date
EndDate Date

***,要設(shè)置相關(guān)的查詢公式,在除報表頁眉的區(qū)域,鼠標(biāo)右鍵點(diǎn)擊,在彈出菜單中選擇“報表|編輯選擇公式|記錄”,輸入如下的公式:

實(shí)例講解:ASP.NET水晶報表教程之公式編輯器

在上面的公式編輯器中,分為左中右三部分,左邊的是報表的字段,中間的是相關(guān)的功能函數(shù),最右邊的是運(yùn)算符,雙擊其中選中的部分,則可以添加到下部的公式顯示區(qū)域中。***,保存建立的公式。

#p#

ASP.NET水晶報表教程之在程序中使用報表

接下來,我們可以在程序中用代碼處理和報表的連接過程。首先,在工程項(xiàng)目中,增加如下的兩個命名空間的引用(注意,在代碼中也必須用using引入它們):

  1. CrystalDecisions.CrystalReports.Engine  
  2. CrystalDecisions.Shared 

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

  1. //接收傳遞的參數(shù)  
  2. nItemId=int.Parse(Request.QueryString.Get("ItemId"));  
  3. strStartDate=Request.QueryString.Get("StartDate");  
  4. strEndDate=Request.QueryString.Get("EndDate");  
  5. //聲明報表的數(shù)據(jù)對象  
  6. CrystalDecisions.CrystalReports.Engine.DatabasecrDatabase;CrystalDecisions.CrystalReports.Engine.TablecrTable;  
  7. TableLogOnInfodbConn=newTableLogOnInfo();  
  8. //創(chuàng)建報表對象opt  
  9. ReportDocumentoRpt=newReportDocument();  
  10. //加載已經(jīng)做好的報表  
  11. oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");  
  12. //連接數(shù)據(jù)庫,獲得相關(guān)的登陸信息  
  13. crDatabase=oRpt.Database;  
  14. //定義一個arrtables對象數(shù)組  
  15. object[]arrTables=newobject[1];  
  16. crDatabase.Tables.CopyTo(arrTables,0);  
  17. crTable=(CrystalDecisions.CrystalReports.Engine.Table)arrTables[0];dbConn=crTable.LogOnInfo;  
  18. //設(shè)置相關(guān)的登陸數(shù)據(jù)庫的信息  
  19. dbConn.ConnectionInfo.DatabaseName="WroxSellers";dbConn.ConnectionInfo.ServerName="localhost";  
  20. dbConn.ConnectionInfo.UserID="sa";  
  21. dbConn.ConnectionInfo.Password="test";  
  22. //將登陸的信息應(yīng)用于crtable表對象  
  23. crTable.ApplyLogOnInfo(dbConn);  
  24. //將報表和報表瀏覽控件綁定  
  25. crViewer.ReportSource=oRpt;  
  26. //傳遞參數(shù)  
  27. setReportParameters(); 

在上面的代碼中,首先接收了日期,貨品編號等參數(shù),并實(shí)例化了Database,Table和TableLogOnInfo三個類,它們是用來在運(yùn)行時,建立報表和數(shù)據(jù)庫的連接必需的。再使用

           oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");

來裝載已經(jīng)做好了的報表。

在裝載完報表后,將數(shù)據(jù)庫中要使用的表復(fù)制到一個對象數(shù)組中去,并選擇對象數(shù)組中的***個表元素,將其轉(zhuǎn)換為水晶報表的報表對象。接著,再設(shè)置LOGONINFO中的登陸數(shù)據(jù)庫的信息。***,將報表源與報表瀏覽控件綁定。

#p#

ASP.NET水晶報表教程之傳遞參數(shù)到ASP.NET水晶報表

定義一個新的過程,setReportParameters(),代碼如下:

  1. privatevoidsetReportParameters()  
  2. {  
  3. //alltheparameterfieldswillbeaddedtothiscollection  
  4. ParameterFieldsparamFields=newParameterFields();  
  5. //theparameterfieldstobesenttothereport  
  6. ParameterFieldpfItemId=newParameterField();  
  7. ParameterFieldpfStartDate=newParameterField();  
  8. ParameterFieldpfEndDate=newParameterField();  
  9. //設(shè)置在報表中,將要接受的參數(shù)字段的名稱  
  10. pfItemId.ParameterFieldName="ItemId";  
  11. pfStartDate.ParameterFieldName="StartDate";  
  12. pfEndDate.ParameterFieldName="EndDate";  
  13. ParameterDiscreteValuedcItemId=newParameterDiscreteValue();  
  14. ParameterDiscreteValuedcStartDate=newParameterDiscreteValue();ParameterDiscreteValuedcEndDate=newParameterDiscreteValue();  
  15.  
  16. dcItemId.Value=nItemId;  
  17. dcStartDate.Value=DateTime.Parse(strStartDate);  
  18. dcEndDate.Value=DateTime.Parse(strEndDate);  
  19.  
  20. pfItemId.CurrentValues.Add(dcItemId);  
  21. pfStartDate.CurrentValues.Add(dcStartDate);pfEndDate.CurrentValues.Add(dcEndDate);  
  22. paramFields.Add(pfItemId);  
  23. paramFields.Add(pfStartDate);  
  24. paramFields.Add(pfEndDate);  
  25.  
  26. //將參數(shù)集合綁定到報表瀏覽控件  
  27. crViewer.ParameterFieldInfo=paramFields;  

現(xiàn)在來解釋一下上面的代碼。在水晶報表中,瀏覽器控件有一個屬性parameterfieldsinfo,該屬性可以通過綁定parameterfields類型的集合,將相關(guān)的參數(shù)的實(shí)際數(shù)值傳遞到報表。Parameterfields類型集合通過add的方法,接收Parameterfield類型的對象。因此,我們先為itemid,startdate,enddate三個參數(shù)創(chuàng)建parameterfield類型的對象,并且設(shè)置它們對應(yīng)報表中接受參數(shù)的名稱:

  1. ParameterFieldsparamFields=newParameterFields();  
  2. ParameterFieldpfItemId=newParameterField();  
  3. ParameterFieldpfStartDate=newParameterField();  
  4. ParameterFieldpfEndDate=newParameterField();  
  5. //設(shè)置在報表中,將要接受的參數(shù)字段的名稱  
  6. pfItemId.ParameterFieldName="ItemId";  
  7. pfStartDate.ParameterFieldName="StartDate";  
  8. pfEndDate.ParameterFieldName="EndDate"

接著,可以為這些參數(shù)字段設(shè)置具體的值了,但由于parameterfield必須接受ParameterDiscreteValue類型的對象,所以,再創(chuàng)建相關(guān)的實(shí)例:

  1. ParameterDiscreteValuedcItemId=newParameterDiscreteValue();  
  2. ParameterDiscreteValuedcStartDate=newParameterDiscreteValue();  
  3. ParameterDiscreteValuedcEndDate=newParameterDiscreteValue();  
  4. dcItemId.Value=nItemId;  
  5. dcStartDate.Value=DateTime.Parse(strStartDate);  
  6. dcEndDate.Value=DateTime.Parse(strEndDate); 

***,就可以在三個parameterfield的對象中的currentvalues中設(shè)置它們的值,并往paramFields集合中加進(jìn)這三個parameterfield對象。

運(yùn)行的結(jié)果如下。

以上ASP.NET水晶報表教程相關(guān)程序在VS.NET2003,crystalreport9以上版本可以正確運(yùn)行。

【編輯推薦】

  1. 淺談ASP.NET報表控件
  2. 概述ASP.NET水晶報表
  3. VS.Net中的水晶報表的應(yīng)用
  4. VS.NET 2002下水晶報表的安裝與部署
  5. ASP.NET 2.0部署WEB應(yīng)用程序淺析
  6. ASP.NET中的數(shù)據(jù)源控件


 

責(zé)任編輯:老楊 來源: 搜狐IT
相關(guān)推薦

2009-07-29 09:29:06

ASP.NET水晶報表

2009-08-02 11:48:58

ASP.NET水晶報表ASP.NET

2009-08-25 17:00:32

ASP.NET水晶報表

2009-09-07 19:03:08

2009-11-05 14:03:28

Visual Stud

2009-08-31 15:11:23

C#調(diào)用水晶報表

2010-01-14 10:52:13

VB.NET水晶報表

2009-08-31 16:01:28

C#水晶報表數(shù)據(jù)獲取方

2009-10-16 13:30:51

VB.NET水晶報表控

2009-12-15 17:20:07

VS 水晶報表

2009-08-31 16:09:42

.net水晶報表使用學(xué)

2009-07-28 11:34:02

ASP.NET架設(shè)

2009-07-27 16:19:59

ASP.NET報表控件

2009-07-22 17:45:35

ASP.NET教程

2009-07-30 14:18:02

ASP.NET實(shí)例教程

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-08-04 16:33:50

ASP.NET移動開發(fā)

2009-08-31 15:54:35

2009-07-24 09:20:15

數(shù)組實(shí)例

2009-11-02 09:14:51

ASP.NET MVC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號