提要 本文試驗將幫助你創建一個使用Crystal Report的Web應用程序—報告中的數據來源於一個對象集合
你將創建一個專門的類來保存股票市場數據
一 開發目標 結束本試驗後
你將能夠更好地
· 創建一個專門的類來保存股票市場值
· 實例化這個類
· 使用數據填充一個對象集合
· 通過一個web表單動態地添加數據
· 使用Crystal Report Designer熟練地創建一個水晶報表
二 內容說明 本實驗將引導你創建一個Crystal Reports web應用程序—報告中的數據來源於一個對象集合
該應用程序是用Crystal Reports for Visual Studio
Beta
進行開發成功
然後
你將創建一個專門的類來保存股票市場值
實例化該類並使用數據填充一個對象集合
並且通過一個web表單進一步動態地添加數據
然後
你將創建一個水晶報表
通過使用Crystal Report Designer控件—它連接到對象集合並且動態地生成一個圖表和股票摘要信息
三 練習一Web應用程序安裝 說明 在本練習中
你將創建一個新的網站
並且應用標准設置來完成此練習
詳細步驟
在Visual Studio中創建一個新的ASP
NET Web站點
· 雙擊桌面上的Visual Studio
Beta
快捷方式
· 點擊
文件|新建|網站
· 在
新建網站
對話中
點擊
ASP
NET 網站
· 在
位置
列表中
選擇
文件系統
· 在
語言
列表中
選擇
Visual C#
· 在
位置
文本域中
接受默認的路徑和名稱
· 點擊OK
添加Crystal Report Viewer 控件
· 從Solution Explorer中
雙擊Default
aspx以打開該web表單
· 點擊在該表單底部的
設計
按鈕來把Web表單改變到設計視圖
· 從工具欄中
展開Crystal Reports結點並且定位到CrystalReportViewer控件
· 把CrystalReportViewer控件拖動到該Web表單
· 如果
Smart Task
面板上的
CrystalReportViewer Tasks
被打開
則按下Esc鍵關閉它
·
Smart Task
面板是Visual Studio
中的一個新特征—允許用較少的代碼來創建工程
在這個選項卡中
你將使用一種編程方式
因此不必使用
Smart Task
面板
· 點擊Properties選項卡並且選擇CrystalReportViewer
· 從Properties窗口中
把ID屬性設置為crystalReportViewer
· 從文件菜單下
點擊SaveAll
添加編程環境
· 點擊Solution Explorer選項卡
· 在Solution Explorer中
右擊Default
aspx並且點擊
View Code
· 在類簽名的上面
使用
using
語句加入對裝配集命名空間的引用聲明
· ConfigureCrystalReports()是一個助理方法—它負責在運行時刻與報告交互
它還負責以編程方式與報告進行交互
為了正確地配置CrystalReportViewer
必須從中Page_Init()調用它
· 使用顯示的適當語法添加Page_Init事件處理器
private void Page_Init(object sender
EventArgs e)
{}
· 在Visual Studio
的一個C# Web表單中
在code
behind類中的Page_Init事件處理器是被自動地依附到Init事件的
這個事件處理器簽名必須正確匹配以便進行調用
· 最後
在Page_Init事件處理器中
加入對ConfigureCrystalReports()助理方法的調用
ConfigureCrystalReports();
· 從文件菜單下點擊Save All
· 現在你已經准備好創建你的定制股票市場信息類了
四 練習:創建一個定制的股票市場信息
說明 在本練習中你要創建一個定制的類來保存股票市場信息這個類將用於填充一個對象集合
詳細步驟
· 在Solution Explorer中右擊粗體的網站名然後點擊Add New Item
· 然後出現Add New Item 對話框
· 在Visual StudioInstalled Templates域中選擇Class
· 在Name字段中輸入Stock然後點擊Add
· 在隨後出現的對話框中點擊Yes
· 在Visual Studio 中所有的類必須被放置到一個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中存取這個對象了
五 練習:創建一個水晶報表
說明 在本練習中你將在內置的Crystal Report Designer中創建一個新的Crystal report然後把這個報告綁定到Stock對象
詳細步驟
· 右擊網站名並且點擊Add New Item
· 在Add New Item 對話框中選擇Crystal Report
· 在Name字段中輸入StockObjectsrpt然後點擊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
六 練習:把你的水晶報表綁定到Crystal Report Viewer
說明 在這個練習中你將把Stock對象報告綁定到Crystal Report Viewer把報告的數據源設置為一個對象集合並且用編程方式來填充一個對象集合
詳細步驟
把報告綁定到Crystal Report Viewer
· 切換到默認的CodeBehind類Defaultaspxcs
· 在類簽名之上加入對命名空間SystemCollections的引用
using SystemCollections;
· 這個參考使你能夠存取ArrayList類而ArrayList實現了ICollection這使得ArrayList成為用來構建一個為Crystal Reports所識別的對象集合的若干類的類型之一
· 添加一個新的類級別的ArrayList命名為stockValues
private ArrayList stockValues;
· 為ReportDocument報告包裝類添加一個新的類級別的聲明變量名為stockObjectsReport並把它設置為private型
private ReportDocument StockObjectsReport;
· 在你在練習創建的ConfigureCrystalReports()方法中聲明一個字符串變量命名它為reportPath並且把一個指向本地報告的運行時刻路徑賦值給它把本地報告文件的名字作為一個字符串參考傳遞給ServerMapPath()方法這樣以來把本地報告映射到運行時刻文件路徑
String reportPath = ServerMapPath(StockObjectsrpt);
· 實例化ReportDocument類
StockObjectsReport = new ReportDocument();
· 在下一行中調用ReportDocument實例的Load()方法並且把reportPath字符串變量傳遞給它
StockObjectsReportLoad(reportPath);
· 這個ReportDocument類是CrystalDecisionsCrystalReportsEngine命名空間的一個成員你已經在練習: Web應用程序安裝中添加了對這個命名空間的聲明(在C#中是使用using)當你實例化ReportDocument並且加載一個報告時你可以通過SDK來存取這個報告
· 然後把這個報告的數據源設置為stockValues ArrayList
StockObjectsReportSetDataSource(stockValues);
· 最後把CrystalReportViewer的ReportSource屬性綁定到ReportDocument實例
crystalReportViewerReportSource = stockObjectsReport;
l 現在這個Stock對象報告被綁定到Crystal Report Viewer並且頁面顯示正確的報告然而當前的報告被綁定到一個空數據源上因此報告中沒有要顯示的信息在下一步中你將用樣本數據以編程方式填充stockValues ArrayList
以編程方式填充一個對象集合
在這個任務中你將把Session代碼添加到ASPX codebehind類如果在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 s = new Stock(AWRK);
Stock s = new Stock(CTSO);
Stock s = new Stock(LTWR);
· 把這三個實例添加到stockValues
stockValuesAdd(s); stockValuesAdd(s); stockValuesAdd(s);
· 把更新的stockValues ArrayList添加到session中
Session[stockValues]=stockValues;
· 在Else塊中加入一行代碼以便把session中的當前值賦給stockValues ArrayList
stockValues = (ArrayList)Session[stockValues];
· 最後從ConfigureCrystalReports()方法中調用PopulateStockValuesArrayList()
· 這應該是ConfigureCrystalReports()方法中被執行代碼的第一行
PopulateStockValuesArrayList();
· 從Build菜單下點擊Build Solution
· 如果你有任何構建錯誤現在就修改它們
· 從Debug菜單下點擊Start Debugging
· 如果這是你啟動調試器的第一次那麼將出現一個對話框告訴你必須修改nfig文件點擊OK按鈕以啟動調試功能
· Defaultaspx頁面連同三個缺省值加載到你的浏覽器中
· 關閉Internet Explorer窗口
七 練習:把數據動態地添加到股票報告上
說明 在上一個練習中你用編程方式填充對象集合在本練習中你將學習如何動態地從你的網站把信息添加到你的數據源該信息能夠在你的報表中得到自動更新
詳細步驟
添加控件到Web表單
· 在Design視圖中打開Defaultaspx文件
· 為了在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 按鈕
· 雙擊按鈕控件將打開Codebehind類並且自動生成一個addStockInformation_click()事件處理器
把信息添加到集合
· 在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屬性
tempSymbol = symbolText;
· 在下一行中把在Web表單中的price字段的值賦值到Stock對象的Price屬性注意在賦值之前要把Web表單中的這個值轉化為一個Double
tempPrice = ConvertToDouble(priceText);
· 然後把在Web表單中的volume字段的值賦值到Stock對象的Volume屬性注意在賦值之前要把Web表單中的這個值轉化為一個整數
tempVolume = ConvertToInt(volumeText);
· 在try/catch塊的外面把Stock Object添加到stockValues ArrayList
stockValuesAdd(temp);
· 更新當前存在於Session中的stockValues的值
Session[stockValues] = stockValues;
· 最後調用ConfigureCrystalReports()方法這將把報告重新綁定到這個更新過的stockValues—一個對象集合
ConfigureCrystalReports();
· 從Build菜單下點擊Build Solution
· 如果你遇到任何構建錯誤則現在就修改
· 從Debug菜單下點擊Start Debugging
· 如果沒有出現構建錯誤Defaultaspx頁面將使用三個缺省值加載到你的浏覽器為了添加其它值適當地填充文本框並且點擊Add Stock Information按鈕報告將會被動態地更新
· 當你運行你的網站時報告將裝載到你的浏覽器窗口中—使用三個缺省值(你是在練習中以編程方式添加的)在報告上面共有三個TextBox控件和一個按鈕控件使用這些控件你可以動態地更新你的一個對象集合並且看到這一更新的結果會反映到你的報告中
· 關閉Internet Explorer窗口
八 練習:在報告中添加圖表和摘要信息
說明 至此你已經擁有一個全功能的網站它將顯示一個基於一個對象集合的水晶報表該站點將顯示以編程方式輸入到一個對象集合中的信息以及在運行時刻被動態地添加的信息
在這個練習中你將添加兩個圖表一個calculated字段和摘要信息
詳細步驟
把一個圖表添加到報告中
· 從solution explorer下打開StockObjectsrpt
· 從Crystal Reports菜單下選擇Insert並且點擊Chart
· 在Chart Expert對話框中選擇一個Pie圖
· 選擇Data選項卡
· 選擇StockSymbol並且點擊最右方向箭頭以把StockSymbol字段移動到On Change Of字段
· 選擇StockVolume並且點擊最右方向箭頭以把StockVolume字段移動到Show Value(s)字段
· 點擊OK
· 創建一個新的Report Header節並且把一個圖表對象添加到這一節中
· 從Debug菜單下點擊Start Debugging
· 如果不出現構建錯誤那麼Defaultaspx頁面將加載到你的浏覽器中
· 關閉Internet Explorer窗口
添加一個基於一個formula字段的圖表在這一節中你將創建一個顯示合計信息的圖表首先你將創建一個公式以計算一個特定的持股值然後創建一個餅圖—它顯示你的所有持股值的比例值
· 從Crystal Reports菜單下選擇Report並且點擊Formula Workshop
· 在Formula Workshop對話框中選擇Formula Fields
· 點擊New按鈕創建一個新公式
· 在Formula Name對話框中輸入值
· 點擊Use Editor
· 添加代碼以把price字段值與volume字段值相乘
{StockVolume}*{StockPrice}
· 點擊Save並關閉
· 從Crystal Reports菜單下選擇Insert並且點擊Chart
· 在Chart Expert對話框下選擇一個Pie圖
· 點擊Data選項卡
· 選擇StockSymbol並且點擊最右方向箭頭把StockSymbol字段移動到On Change Of字段
· 選擇Worth並且點擊最右方向箭頭把Worth公式移動到Show Value(s)字段
· 點擊Text選項卡
· 在Title旁邊清除Autotext復選框
· 在Title字段中輸入Worth/Symbol
· 點擊OK
· 一個新的Report Header節被創建並且有一個Chart對象被添加到這一節上
· 為了重新放置在一個水晶報表中的對象的位置你可以用鼠標拖動之並把它們放在任何你想放置的位置你可以使用在表單底部的Main Report Preview按鈕來顯示你的報告的一個預覽
把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
· 如果沒有出現構建錯誤Defaultaspx頁面將加載到你的浏覽器
· 關閉Internet Explorer窗口
添加一個前面已經存在的報告在這一節中你將讓你的Web應用程序使用一個位於你的文件系統中的現有報告
· 右擊Solution Explorer中的StockObjectsrpt
· 點擊Delete
· 點擊彈出的對話框中的OK
· 在Solution Explorer中右擊加粗的網站名然後點擊Add Existing Item
· 在Add Existing Item對話框中導航到C:\Microsoft HandsOnLab\HOLILL\Source\Excercises並選擇StockObjectsrpt文件
· 點擊Add
· 從Debug菜單下點擊Start Debugging
· 如果沒有出現構建錯誤那麼Defaultaspx page將加載到你的浏覽器中並且顯示你的新報告
· 關閉Internet Explorer窗口
From:http://tw.wingwit.com/Article/program/net/201311/11331.html