提要 本文试验将帮助你创建一个使用Crystal Report的Web应用程序报告中的数据
详细步骤
在Solution Explorer中,右击粗体的网站名,然后点击Add New Item。
然后,出现Add New Item 对话框。
在Visual StudioInstalled 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窗口。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)七、 练习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。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)现在,你可以发现把文本添加在每一个文本框旁边极有助于标识哪个控件相应于哪个参数。
然后,从工具箱中,把一个按钮控件拖动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窗口。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)八、 练习6:在报告中添加图表和摘要信息
说明 至此,你已经拥有一个全功能的网站,它将显示一个基于一个对象集合的水晶报表。该站点将显示以编程方式输入到一个对象集合中的信息,以及在运行时刻被动态地添加的信息。
在这个练习中,你将添加两个图表,一个calculated字段和摘要信息。