程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> VS2005+Crystal Report開發Web應用

VS2005+Crystal Report開發Web應用

編輯:關於C#

提要 本文試驗將幫助你創建一個使用Crystal Report的Web應用程序— 報告中的數據來源於一個對象集合,你將創建一個專門的類來保存股票市場數據 。

一、開發目標

結束本試驗後,你將能夠更好地:

· 創建一個專門的類來保存股票市場值。

· 實例 化這個類。

· 使用數據填充一個對象集合。

· 通 過一個web表單動態地添加數據。

· 使用Crystal Report Designer熟練地創建一個水晶報表。

二、內容說明

本實驗將引 導你創建一個Crystal Reports web應用程序—報告中的數據來源於一個對 象集合。該應用程序是用Crystal Reports for Visual Studio 2005 Beta 2進 行開發成功。

然後,你將創建一個專門的類來保存股票市場值,實例化 該類並使用數據填充一個對象集合,並且通過一個web表單進一步動態地添加數 據。然後,你將創建一個水晶報表,通過使用Crystal Report Designer控件 —它連接到對象集合並且動態地生成一個圖表和股票摘要信息。

三 、練習一:Web應用程序安裝

說明 在本練習中,你將創建一個新的網站 ,並且應用標准設置來完成此練習。

詳細步驟

1. 在Visual Studio中創建一個新的ASP.NET Web站點。

· 雙擊桌面上的 Visual Studio 2005 Beta 2快捷方式。

· 點擊“文件|新 建|網站”。

· 在“新建網站”對話中,點擊 “ASP.NET 網站”。

· 在“位置”列表中 ,選擇“文件系統”。

· 在“語言”列表 中,選擇“Visual C#”。

· 在“位置” 文本域中,接受默認的路徑和名稱。

· 點擊OK。

2. 添加 Crystal Report Viewer 控件。

· 從Solution Explorer中,雙 擊Default.aspx以打開該web表單。

· 點擊在該表單底部的 “設計”按鈕來把Web表單改變到設計視圖。

· 從工 具欄中,展開Crystal Reports結點並且定位到CrystalReportViewer控件。

· 把CrystalReportViewer控件拖動到該Web表單。

· 如果“Smart Task”面板上的 “CrystalReportViewer Tasks”被打開,則按下Esc鍵關閉它。

· “Smart Task”面板是Visual Studio 2005中的一 個新特征—允許用較少的代碼來創建工程。在這個選項卡中,你將使用一 種編程方式,因此不必使用“Smart Task”面板。

· 點擊Properties選項卡並且選擇CrystalReportViewer。

· 從 Properties窗口中,把ID屬性設置為crystalReportViewer。

· 從文件菜單下,點擊SaveAll。

3. 添加編程環境。

· 點 擊Solution Explorer選項卡。

· 在Solution Explorer中,右擊 Default.aspx並且點擊“View Code”。

· 在類簽名 的上面,使用“using”語句加入對裝配集命名空間的引用聲明。

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

· 在這個類中,添加一個新 的private型且無返回值的助理方法ConfigureCrystalReports()。

private void ConfigureCrystalReports()
{}

· ConfigureCrystalReports()是一個助理方法— 它負責在運行時刻與報告交互。它還負責以編程方式與報告進行交互。為了正確 地配置CrystalReportViewer,必須從中Page_Init()調用它。

· 使用顯示的適當語法添加Page_Init事件處理器。

private void Page_Init(object sender, EventArgs e)
{}

· 在Visual Studio 2005的一個C# Web表單中,在code-behind類中的Page_Init事 件處理器是被自動地依附到Init事件的。這個事件處理器簽名必須正確匹配以便 進行調用。

· 最後,在Page_Init事件處理器中,加入對 ConfigureCrystalReports()助理方法的調用。

ConfigureCrystalReports();

· 從文件菜 單下,點擊“Save All”。

· 現在,你已經准備好創 建你的定制股票市場信息類了。

四、練習2:創建一個定制的股票市場信 息

說明 在本練習中,你要創建一個定制的類來保存股票市場信息。這個 類將用於填充一個對象集合。

詳細步驟

· 在Solution Explorer中,右擊粗體的網站名,然後點擊“Add New Item”。

· 然後,出現“Add New Item ”對話框。

· 在Visual Studio“Installed Templates”域中, 選擇“Class”。

· 在Name字段中,輸入Stock,然後 點擊Add。

· 在隨後出現的對話框中點擊Yes。

· 在Visual Studio 2005中,所有的類必須被放置到一個App Code文件夾下,如果 要使用它們的話。當你點擊Add按鈕時,將出現一個警告對話框問你是否想把你 的類放到這個App_Code文件夾下。

· 本文中的Stock類必須被設 置為public類,以便當你創建報告時存取它。請一定要確保你創建的類是public 型。

public class Stock
{
 public Stock()
 {}
}

· 在這個類中,加入三個private字段。

private string _symbol;
private double _price;
private int _volume;

· 然後,你將把三個public讀/ 寫屬性加入以封裝這三個private字段。

· 創建一個新的屬性, 命名為Symbol。

public string Symbol
{
 get
 {
  return _symbol;
 }
 set
 {
   _symbol = value;
 }
}

· 創建一個新的屬 性,命名為Price。

public double Price
{
 get
 {
  return _price;
 }
 set
 {
   _price = value;
 }
}

· 創建一個新的屬性 ,命名為Volume。

public int Volume
{
 get
 {
  return _volume;
 }
 set
 {
   _volume = value;
 }
}

· 最後,創建一個 新的構造器,它使用三個public屬性作為參數。

public Stock (String symbol, int volume, double price)
{
 _symbol = symbol;
 _volume = volume;
 _price = price;
}

· 從Build菜單下,點擊“Build Website” 。

· 如果你有任何構建錯誤現在就修改它們。

· 現在,你已經准備好從內置的Crystal Report Designer中存取這個對象了。

五、練習3:創建一個水晶報表

說明 在本練習中,你將在內置的 Crystal Report Designer中創建一個新的Crystal report,然後把這個報告綁 定到Stock對象。

詳細步驟

· 右擊網站名並且點擊 “Add New Item”。

· 在“Add New Item” 對話框中,選擇“Crystal Report”。

· 在Name字段中,輸入StockObjects.rpt,然後點擊Add。

· 在“Crystal Reports Gallery”對話框中,點擊 OK。

· 在“Standard Report Creation Wizard”對 話框中,展開“Project Data”及子結點“.NET Objects”。

· 將出現該工程中的一個類列表。

· 展開Stock類來觀察一個可選擇的子結點。

· 點擊向右的箭頭,以便把“Stock”類子結點移動到“Selected Tables”面板上。

· 點擊Next。

· 展開 Stock並且點擊“>>”以便把所有的列移動到“Fields to Display”面板上。

· 點擊Next。

· 選 擇Symbol並且點擊向右的箭頭來把它移動到“Group By”面板上。

· 點擊Finish。

六、練習4:把你的水晶報表綁定到 Crystal Report Viewer

說明 在這個練習中,你將把Stock對象報告綁定 到Crystal Report Viewer,把報告的數據源設置為一個對象集合,並且用編程 方式來填充一個對象集合。

詳細步驟

1. 把報告綁定到Crystal Report Viewer。

· 切換到默認的Code-Behind類, Default.aspx.cs。

· 在類簽名之上,加入對命名空間 System.Collections的引用。

using System.Collections;

· 這個參考使你能夠存取ArrayList類,而 ArrayList實現了ICollection。這使得ArrayList成為用來構建一個為Crystal Reports所識別的對象集合的若干類的類型之一。

· 添加一個新 的類級別的ArrayList,命名為stockValues。

private ArrayList stockValues;

· 為ReportDocument報告包裝類添加一個 新的類級別的聲明,變量名為stockObjectsReport。並把它設置為private型。

private ReportDocument StockObjectsReport;

· 在你在練習1創建的 ConfigureCrystalReports()方法中,聲明一個字符串變量,命名它為 reportPath,並且把一個指向本地報告的運行時刻路徑賦值給它。把本地報告文 件的名字作為一個字符串參考傳遞給Server.MapPath()方法。這樣以來,把本地 報告映射到運行時刻文件路徑。

String reportPath = Server.MapPath("StockObjects.rpt");

· 實 例化ReportDocument類。

StockObjectsReport = new ReportDocument();

· 在下一行中,調用 ReportDocument實例的Load()方法,並且把reportPath字符串變量傳遞給它。

StockObjectsReport.Load (reportPath);

· 這個ReportDocument類是 CrystalDecisions.CrystalReports。Engine命名空間的一個成員。你已經在 “練習1: Web應用程序安裝”中添加了對這個命名空間的聲明(在C# 中是使用“using”)。當你實例化ReportDocument並且加載一個報 告時,你可以通過SDK來存取這個報告。

· 然後,把這個報告的 數據源設置為“stockValues ArrayList”。

StockObjectsReport.SetDataSource (stockValues);

· 最後,把CrystalReportViewer的 ReportSource屬性綁定到ReportDocument實例。

crystalReportViewer.ReportSource = stockObjectsReport;

l. 現在,這個Stock對象報告被綁定到 Crystal Report Viewer並且頁面顯示正確的報告;然而,當前的報告被綁定到 一個空數據源上,因此報告中沒有要顯示的信息。在下一步中,你將用樣本數據 以編程方式填充stockValues ArrayList。

2. 以編程方式填充一個對象 集合。

3. 在這個任務中,你將把Session代碼添加到ASPX code-behind 類。如果在session中沒有值,將會生成默認值。如果session中有值,它們將被 賦值到stockValues ArrayList中。

· 在這個類中,添加一個新 的public范圍的不具有返回值的助理方法,命名為 PopulateStockValuesArrayList()。

public void PopulateStockValuesArrayList()
{}

· 在 PopulateStockValuesArrayList()方法中,在現有代碼前,創建一個if/else條 件塊—它檢查是否存在一個名為stockValues的Session對象。

if(Session["stockValues"] == null)
{}
else
{}

· 在這個If塊中,實例化一個新的 ArrayList()。

stockValues = new ArrayList ();

· 然後,使用Stock類的重載構造器來創建和實例化 Stock的三個實例。

Stock s1 = new Stock("AWRK", 1200,28.47);
Stock s2 = new Stock("CTSO",800, 128.69);
Stock s3 = new Stock("LTWR",1800, 12.95);

· 把這三個實例添加到stockValues。

stockValues.Add(s1); stockValues.Add(s2); stockValues.Add(s3);

· 把更新的stockValues ArrayList添加到session中。

Session ["stockValues"]=stockValues;

· 在Else塊 中,加入一行代碼以便把session中的當前值賦給stockValues ArrayList。

stockValues = (ArrayList)Session ["stockValues"];

· 最後,從 ConfigureCrystalReports()方法中調用PopulateStockValuesArrayList()。

· 這應該是ConfigureCrystalReports()方法中被執行代碼的第 一行。

PopulateStockValuesArrayList ();

· 從Build菜單下,點擊Build Solution。

· 如果你有任何構建錯誤現在就修改它們。

· 從 Debug菜單下,點擊“Start Debugging”。

· 如果這 是你啟動調試器的第一次,那麼將出現一個對話框告訴你必須修改Web.config文 件。點擊OK按鈕以啟動調試功能。

· Default.aspx頁面連同三個 缺省值加載到你的浏覽器中。

· 關閉Internet Explorer窗口。

七、練習5:把數據動態地添加到股票報告上

說明 在上一個練習 中,你用編程方式填充對象集合。在本練習中,你將學習如何動態地從你的網站 把信息添加到你的數據源。該信息能夠在你的報表中得到自動更新。

詳 細步驟

1. 添加控件到Web表單。

· 在Design視圖中打開 Default.aspx文件。

· 為了在Design視圖中打開一個ASPX頁面, 首先打開文件,然後點擊在該表單底部的Design按鈕。

· 點擊 CrystalReportViewer控件來選擇它。

· 按下左箭頭鍵,以便出 現閃爍的光標,並且按回車鍵從視圖中往下移動四次。

· 從工具 箱中,把一個TextBox控件拖動到Web表單。

· 從Property菜單下 ,把ID設置為symbol。

· 把第二個TextBox控件拖動到Web表單。 把這第二個TextBox放到第一個下面。

· 從Property菜單下,把 ID設置為price。

· 把第三個TextBox控件拖動到Web表單。把這 第三個TextBox控件放到第二個下面。

· 從Property菜單下,把 ID設置為volume。

· 現在,你可以發現把文本添加在每一個文本 框旁邊極有助於標識哪個控件相應於哪個參數。

· 然後,從工具 箱中,把一個按鈕控件拖動Web表單上。把該按鈕放到這三個TextBox控件下。

· 從Property菜單下,把該按鈕的ID設置為 addStockInformation。

· 把該按鈕的Text設置為“Add Stock Information”。

· 最後,雙擊“Add Stock Information” 按鈕。

· 雙擊按鈕控件將打開Code-behind 類並且自動生成一個addStockInformation_click()事件處理器。

2. 把 信息添加到集合。

· 在addStockInformation_click()事件處理 器中,創建並且實例化一個新的Stock對象。

Stock temp = new Stock();

· 在addStockInformation_click()方法中,創 建一個try/catch塊。

try
{}
catch
{}

· 輸入到一個Web表單中的信息屬於String類型。因為 Stock類中的兩個字段都是numerical型,所以你需要編寫代碼來把Web表單中的 String值轉換為numerical值。try/catch語句有助於保護你的web應用程序免於 崩潰—在類型轉換出現錯誤匹配期間。

· 在Try塊中,把在 Web表單中的symbol字段的值賦值到Stock對象的Symbol屬性。

temp.Symbol = symbol.Text;

· 在下一行中,把在Web表 單中的price字段的值賦值到Stock對象的Price屬性。注意,在賦值之前,要把 Web表單中的這個值轉化為一個Double。

temp.Price = Convert.ToDouble(price.Text);

· 然後,把在Web表單 中的volume字段的值賦值到Stock對象的Volume屬性。注意,在賦值之前,要把 Web表單中的這個值轉化為一個整數。

temp.Volume = Convert.ToInt32(volume.Text);

· 在try/catch塊的外 面,把“Stock Object”添加到stockValues ArrayList。

stockValues.Add(temp);

· 更新當前存在 於Session中的stockValues的值。

Session ["stockValues"] = stockValues;

· 最後, 調用ConfigureCrystalReports()方法。這將把報告重新綁定到這個更新過的 stockValues—一個對象集合。

ConfigureCrystalReports ();

· 從Build菜單下,點擊“Build Solution”。

· 如果你遇到任何構建錯誤,則現在就修改 。

· 從Debug菜單下,點擊“Start Debugging”。

· 如果沒有出現構建錯誤,Default.aspx頁面將使用三個缺省值 加載到你的浏覽器。為了添加其它值,適當地填充文本框並且點擊“Add Stock Information”按鈕。報告將會被動態地更新。

· 當 你運行你的網站時,報告將裝載到你的浏覽器窗口中—使用三個缺省值( 你是在練習4中以編程方式添加的)。在報告上面共有三個TextBox控件和一個按 鈕控件。使用這些控件,你可以動態地更新你的一個對象集合,並且看到這一更 新的結果會反映到你的報告中。

· 關閉Internet Explorer窗口 。

八、練習6:在報告中添加圖表和摘要信息

說明 至此,你已經 擁有一個全功能的網站,它將顯示一個基於一個對象集合的水晶報表。該站點將 顯示以編程方式輸入到一個對象集合中的信息,以及在運行時刻被動態地添加的 信息。

在這個練習中,你將添加兩個圖表,一個calculated字段和摘要 信息。

詳細步驟

1. 把一個圖表添加到報告中。

· 從solution explorer下,打開StockObjects.rpt。

· 從Crystal Reports菜單下,選擇Insert,並且點擊Chart。

· 在 “Chart Expert”對話框中,選擇一個Pie圖。

· 選 擇Data選項卡。

· 選擇Stock.Symbol並且點擊最右方向箭頭以把 Stock.Symbol字段移動到“On Change Of”字段。

· 選擇Stock.Volume並且點擊最右方向箭頭以把Stock.Volume字段移動到Show Value(s)字段。

· 點擊OK。

· 創建一個新的 “Report Header”節,並且把一個圖表對象添加到這一節中。

· 從Debug菜單下,點擊“Start Debugging”。

· 如果不出現構建錯誤,那麼Default.aspx頁面將加載到你的浏 覽器中。

· 關閉Internet Explorer窗口。

2. 添加一個 基於一個formula字段的圖表。在這一節中,你將創建一個顯示合計信息的圖表 。首先,你將創建一個公式以計算一個特定的持股值,然後創建一個餅圖 —它顯示你的所有持股值的比例值。

· 從Crystal Reports 菜單下,選擇Report,並且點擊“Formula Workshop”。

· 在“Formula Workshop”對話框中,選擇 “Formula Fields”。

· 點擊New按鈕創建一個新公 式。

· 在“Formula Name”對話框中,輸入值。

· 點擊“Use Editor”。

· 添加代碼 以把price字段值與volume字段值相乘。

{Stock.Volume}* {Stock.Price}

· 點擊Save並關閉。

· 從 Crystal Reports菜單下,選擇Insert並且點擊Chart。

· 在 “Chart Expert”對話框下,選擇一個Pie圖。

· 點 擊Data選項卡。

· 選擇Stock.Symbol並且點擊最右方向箭頭把 Stock.Symbol字段移動到“On Change Of”字段。

· 選擇Worth並且點擊最右方向箭頭把Worth公式移動到“Show Value(s) ”字段。

· 點擊Text選項卡。

· 在Title旁 邊,清除“Auto-text”復選框。

· 在Title字段中輸 入Worth/Symbol。

· 點擊OK。

· 一個新的Report Header節被創建,並且有一個Chart對象被添加到這一節上。

· 為了重新放置在一個水晶報表中的對象的位置,你可以用鼠標拖動之並把它們放 在任何你想放置的位置。你可以使用在表單底部的“Main Report Preview“按鈕來顯示你的報告的一個預覽。

3. 把Formula和 Summary字段添加到你的報告中。在這一節中,你添加一個formula字段到你的報 告,還有一個摘要字段—它來計算你的portfolio的總值。

· 展開Field Explorer的“Formula Fields”結點。

· 把worth公式拖動到你的報告。把這個字段放到你的報告的節 中。

· 如果“Field Explorer”不可見,從View菜單 下選擇“Document Outline”。這個字段將顯示每一行的值。使用一 個summary字段顯示你的portfolio的總值。

· 從“Crystal Reports”菜單下,選擇“Insert”,點擊 “Summary”。

· “Insert Summary”對 話框出現。

· 從“Choose the Field to Summarize”字段下選擇Worth公式。

· 從 “Calculate this Summary”字段下選擇“Sum”。

· 從“Summary Location”字段下選擇“Grand Total”。

· 點擊OK。

把一個摘要字段添加到報告 中。

· 從“Debug”菜單下,點擊“Start Debugging”。

· 如果沒有出現構建錯誤,Default.aspx頁 面將加載到你的浏覽器。

· 關閉Internet Explorer窗口。

4. 添加一個前面已經存在的報告。在這一節中,你將讓你的Web應用程 序使用一個位於你的文件系統中的現有報告。

· 右擊Solution Explorer中的StockObjects.rpt。

· 點擊Delete。

· 點擊彈出的對話框中的OK。

· 在Solution Explorer中,右擊加粗的網站名,然後點擊“Add Existing Item” 。

· 在“Add Existing Item”對話框中,導航到 “C:\Microsoft Hands-On-Lab\HOL-ILL05\Source\Excercises”, 並選擇StockObjects.rpt文件。

· 點擊Add。

· 從Debug菜單下,點擊“Start Debugging”。

· 如果 沒有出現構建錯誤,那麼Default.aspx page將加載到你的浏覽器中並且顯示你 的新報告。

· 關閉Internet Explorer窗口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved