微软所提供的Reports Starter Kit给我们展示一种多视图的报表解决方案,这里仅仅只是讨论一下关于里面PieChart和BarChart的实现,以及如何利用GDI+来开发我们自己的报表系统。

在System.Drawing 这个命名空间下面,包含了许多可以用来创建和编辑图像的类,创建图像的时候,我们需要用到Bitmap类和Graphics类,在MSDN的上面,他是这么解释这两个类,来帮助大家理解:把Bitmap类当作是你的画布,而Graphics则是你的画笔,OK,很形象。通常这两个类也是我们在.NET中使用GDI+技术最为常用的两个类。关于这两个类的详细说明大家可以参考.NET Framework的SDK。

Reports Starter Kit中,他基本上使用了5个类来实现了Piechart和BarChart在客户端浏览器的呈现。
Chart类,位于Chart.cs文件,抽象类,作为PieChart和BarChart的基类
ChartItem类,位于ChartItem.cs文件中,具有单一数据项,用于描述每一个数据点的详细信息
ChartItemCollection类,位于ChartItem.cs文件中,继承于.NET中的CollectionBase抽象类
PieChart类,位于PieChart.cs文件中,生成饼图
BarGraph类,位于BarGraph.cs文件中,生成柱状图

通常我们在选择生成图像然后显示在客户端时,有2种方法,调用Bitmap类的Save方法,生成图像文件,直接保存在服务器的物理文件系统中。第二种方法则是直接将图像输出到Response对象的输出应答流中。Reports Starter Kit使用的是后者。当我们在选择输出图像格式的时候,在有些时候,可能为了保证图像质量,需要把图像保存为位图文件,问题是位图对象不能直接写到Response.OutputStream中。为了解决这个问题,我们可以借助于MemoryStream来将位图写到Response.OutputStream中。

Bitmap bmp;
MemoryStream memStream 
= new MemoryStream();

bmp.Save(memStream, ImageFormat.Png);
memStream.WriteTo(Response.OutputStream);


抽空写了一个自己的PieChart类,用于在客户端呈现饼图。由于暂时不能在这边上传文件,大家要的话,请留下Mail地址,我发给你们,里面有非常详细的注释,可以拿来作为不错的参考。截图如下:


很久没在博客园上面发表自己的Blog了,前些日子一直比较忙一点,当然最近就很闲拉,刚刚把工作辞了。准备下个月去东京放松一下,很久没去原宿了~~~~。回来的时候顺道去一次香港,探望一下在那边工作的朋友。昨天中国男足又理所当然的被挤了出去,打了假球还输,唉,坍台阿。