一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart

  前面一篇文章:ASP.NET MVC 3 Beta初体验之WebGrid介绍了WebGrid控件的使用,ASP.NET MVC 3 Beta中才内置Chart的。这篇文章中将介绍Chart的使用。包括Chart数据源的配置、Chart的显示、Chart保存三个方面。Chart是很多系统中使用,所以在ASP.NET MVC 3 Beta初体验之中介绍它是很有必要的。





  1、配置Chart的数据源




  给Chart配置数据源大概有三种方式。

  第一种:使用数组

示例:

Controller代码:


public ActionResult BasicChart()
{
return View();
}

BasicChart.cshtml代码:











<p>
@{
var key = new Chart(width: 600, height: 400)
.AddTitle("人员流动情况")
.AddSeries(name: "Employee",xValue: new[] { "一月份", "二月份", "三月份", "四月份", "五月份", "六月份", "七月份", "八月份", "九月份"}, yValues: new[] { "2", "6", "4", "5", "3","4","9","2","5"})
.Write();
}
</p>














  从上面代码可以看到,我给 Chart的xValue配置了一个数组,相应的yValue也配置了一个相应的数组。

运行效果:










  此时,我们发现这个图形是单独显示的,没有站点的样式和母版。下面实现将这个图形显示在一个页面中。 

定义一个Action:


public ActionResult ShowBasicChart()
{
return View();
}

View代码:定义一个img标签,将src改成生成图片的action。


<p><img src="BasicChart" /> </p>

 效果:有了站点样式和母板:

  第二种方式:数据库查询

示例:


@{ var db = Database.Open("SmallBakery");
var data = db.Query("SELECT Month, Number FROM Employee");
var key = new Chart(width: 600, height: 400)
.AddTitle("人员流动")
.DataBindTable(dataSource: data, xField: "Month")
.Write(); }

  第三种方式:XML

示例:


@using System.Data; @{
var dataSet = new DataSet();
dataSet.ReadXmlSchema(Server.MapPath("~/App_Data/data.xsd"));
dataSet.ReadXml(Server.MapPath("~/App_Data/data.xml"));
var dataView = new DataView(dataSet.Tables[0]);
var key = new Chart(width: 600, height: 400)
.AddTitle("Sales Per Employee")
.AddSeries("Default", chartType: "Pie",
xValue: dataView, xField: "Name",
yValues: dataView, yFields: "Sales")
.Write();
}

  由于这三种方式都类似,了解其中一种,其余的类似,就不细说了,为了简单起见,下面的例子都是用数组的方式来实现。

  2、Chart的显示:

  chartType属性:它有一个chartType属性,可以定义显示的方式。比如将上面的例子的chartType定义为"Pie",就显示为饼图。


@{
var key = new Chart(width: 600, height: 400)
.AddTitle("人员流动情况")
.AddSeries(name: "Employee",chartType: "Pie", xValue:
       new[] { "一月份", "二月份", "三月份", "四月份", "五月份",
       "六月份", "七月份", "八月份", "九月份"},
       yValues: new[] { "2", "6", "4", "5", "3","4","9","2","5"})
.Write();
}

 效果:

 

  template属性:它可以定义背景模板,如修改代码为:template: ChartTheme.Green

代码


@{
var key = new Chart(width: 600, height: 400,template: ChartTheme.Green)
.AddTitle("人员流动情况")
.AddSeries(name: "Employee",xValue: new[] {
"一月份", "二月份", "三月份", "四月份", "五月份", "六月份", "七月份", "八月份", "九月份"}
   , yValues: new[] { "2", "6", "4", "5", "3","4","9","2","5"})
.Write();
}

效果:

  3、Chart保存

   将Chart保存到缓存中:看下面代码:

代码


@{
var chartKey = Request["key"];
if (chartKey != null)
{
var cachedChart = Chart.GetFromCache(key: chartKey);
if (cachedChart == null)
{
cachedChart = new Chart(600, 400);
cachedChart.AddTitle("Cached Chart -- Cached at " + DateTime.Now);
cachedChart.AddSeries(
name: "Employee",
axisLabel: "Name",
xValue: new[] {
               "一月份", "二月份", "三月份", "四月份", "五月份", "六月份", "七月份", "八月份", "九月份"},
yValues: new[] { "2", "6", "4", "5", "3","4","9","2","5"});
cachedChart.SaveToCache(key: chartKey,minutesToCache: 2,
                slidingExpiration: false);
}
Chart.WriteFromCache(chartKey);
}
}

  Chart.GetFromCache(key: chartKey)将根据key从缓存中取出Chart,cachedChart.SaveToCache(key: chartKey,minutesToCache: 2,slidingExpiration: false)是将Chart缓存起来。看下图:

 

  当再次请求的时候,就直接从缓存中取数据。设置缓存两分钟,两分钟之后这次的缓存失效。

   将Chart保存为图片:

  使用下面代码将图形保存为图片:


@{
var filePathName = "_ChartFiles/chart01.jpg";
if (!File.Exists(Server.MapPath(filePathName)))
{
var chartImage = new Chart(600, 400);
chartImage.AddTitle("Chart Title");
chartImage.AddSeries(
name: "Employee",
axisLabel: "Name",
xValue: new[] {
   "一月份", "二月份", "三月份", "四月份", "五月份", "六月份", "七月份", "八月份", "九月份"},
yValues: new[] { "2", "6", "4", "5", "3","4","9","2","5"});
chartImage.Save(path: filePathName);
}
}

  保存之后的图片:

  将Chart保存为保存为XML:


@{ Chart chartXml;
var filePathName = "_ChartFiles/XmlChart.xml";
if (File.Exists(Server.MapPath(filePathName)))
{
chartXml = new Chart(width: 600,height: 400,templatePath: filePathName);
}
else {
chartXml = new Chart(width: 600,height: 400);
chartXml.AddTitle("Chart Title -- Saved at " + DateTime.Now);
chartXml.AddSeries(
name: "Employee",
axisLabel: "Name",
xValue: new[] {
   "一月份", "二月份", "三月份", "四月份", "五月份", "六月份", "七月份", "八月份", "九月份"},
yValues: new[] { "2", "6", "4", "5", "3","4","9","2","5"});
chartXml.SaveXml(path: filePathName);
}
chartXml.Write();
}

   从上面代码我们可以看到,可以通过templatePath将XML转换成Chart。通过SaveXml可以将Chart保存为XML。生成的XML如下:

代码


<Chart Width="600" Height="400">
<Series>
<Series Name="Employee" XValueType="String"
       YValueType="String" ChartArea="Default" AxisLabel="Name">
<Points>
<DataPoint YValues="2" AxisLabel="一月份" />
<DataPoint YValues="6" AxisLabel="二月份" />
<DataPoint YValues="4" AxisLabel="三月份" />
<DataPoint YValues="5" AxisLabel="四月份" />
<DataPoint YValues="3" AxisLabel="五月份" />
<DataPoint YValues="4" AxisLabel="六月份" />
<DataPoint YValues="9" AxisLabel="七月份" />
<DataPoint YValues="2" AxisLabel="八月份" />
<DataPoint YValues="5" AxisLabel="九月份" />
</Points>
</Series>
</Series>
<ChartAreas>
<ChartArea Name="Default">
</ChartArea>
</ChartAreas>
<Titles>
<Title Name="Title1" Text="Chart Title -- Saved at 2010/10/19 23:41:02">
</Title>
</Titles>
</Chart>

  总结:本文就三个方面介绍了ASP.NET MVC 3 Beta中的Chart。包括它的数据源配置、显示以及保存。

  参考:http://www.asp.net/webmatrix/tutorials/7-displaying-data-in-a-chart

  本文完整代码:http://files.cnblogs.com/zhuqil/MvcApplicationChart.rar 

时间: 2024-10-08 05:26:08

一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart的相关文章

一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart:3D效果

在前一篇文章:ASP.NET MVC 3 Beta初体验之超酷的Chart中介绍了Chart的使用,但是没有介绍到3D效果.这篇文章将介绍一下Chart的3D效果的展示.声明一点的是:这个Chart控件可能没有一些开源或者不开源,收费或者不收费的组件那般强大,我相信未来这个控件会越来越强大的.废话不多说了,看下如何展示Chart的3D效果. 显示3D的效果,微软给了我们两种解决方案.一种是使用他自带的样式,一种是自己配置一个显示样式的XML. 第一种使用自带的样式:很简单,在上一篇文章中其实有提

ASP.NET MVC 3 Beta初体验之超酷的Chart

前面一篇文章:ASP.NET MVC 3 Beta初体验之WebGrid介绍了WebGrid控件的使用,ASP.NET MVC 3 Beta中才内置Chart的.这篇文章中将介绍Chart的使用.包括Chart数据源的配置.Chart的显示.Chart保存三个方面.Chart是很多系统中使用, 所以在ASP.NET MVC 3 Beta初体验之中介绍它是很有必要的. 1.配置Chart的数据源 给Chart 配置数据源大概有三种方式. 第一种:使用数组示例:Controller代码: publi

一起谈.NET技术,ASP.NET MVC 3 Beta初体验之实用的WebMail

Asp.net MVC 3 Beta中提供了非常实用发送邮件的组件:WebMail.我试用了一下,和System.Web.Mail类似.这篇文章将简单介绍一下这个组件的使用.通过分成不带附件的邮件发送和带附件的邮件发送两种情况进行讲解.用一个请求帮助的应用场景为例. 不带附件的邮件发送 首先定义Controller.EmailRequest用于请求一个发送邮件的页面,ProcessRequest用去处理发送邮件的请求,并在View中发送邮件. 代码 [HttpGet]public ActionR

一起谈.NET技术,ASP.NET MVC 3 Beta初体验之WebGrid

ASP.NET MVC 3 Beta中除了推出一种新的视图引擎Razor.还推出了几种新的HtmlHelper.我比较关注的是WebGrid,这篇文章将介绍一下WebGrid的使用.WebGrid提供了分页和排序的功能,在此之前在MVC中分页和排序时需要自己去写的.这篇文章将分别介绍在aspx视图引擎和Razor视图引擎中如何使用它. 我通过ADO.NET Entity Data Model从NORTHWND的Products中表中取数据.在Controller中取数据: public clas

ASP.NET MVC 3 Beta初体验之实用的WebMail

Asp.net MVC 3 Beta中提供了非常实用发送邮件的组件:WebMail.我试用了一下,和System.Web.Mail类似.这篇文章将简单介绍一下这个组件的使用.通过分成不带附件的邮件发送和带附件的邮件发送两种情况进行讲解.用一个请求帮助的应用场景为例. 不带附件的邮件发送 首先定义Controller.EmailRequest用于请求一个发送邮件的页面,ProcessRequest用去处理发送邮件的请求,并在View中发送邮件. 代码 [HttpGet] public Action

ASP.NET MVC 3 Beta初体验之WebGrid

ASP.NET MVC 3 Beta中除了推出一种新的视图引擎Razor.还推出了几种新的HtmlHelper.我比较关注的是WebGrid,这篇文章将介绍一下WebGrid的使用.WebGrid提供了分页和排序的功能,在此之前在MVC中分页和排序时需要自己去写的.这篇文章将分别介绍在aspx视图引擎和Razor视图引擎中如何使用它. 我通过ADO.NET Entity Data Model从NORTHWND的Products中表中取数据.在Controller中取数据: public clas

一起谈.NET技术,ASP.NET MVC 3 Beta新特性以及.Net开源的趋势----最新译文

NuPack – .NET的开源软件包管理器 NuPack是一个开源的软件包管理器,它使你在项目中能够更加容易的查找.安装和使用.NET 库.它能够和所有的.NET 项目类型很好的一起工作(包括,没有任何限制的,ASP.NET Web Forms和ASP.NET MVC). NuPack 使维护开源项目的开发者(例如, Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks, Elmah, 等等) 能够去打包他们的库,

Asp.net mvc 3 beta 新特性介绍

国庆放假归来,刚好赶上asp.net mvc 3 beta发布,和大家分享点我的体验. 首先是创建项目时的选择界面的改变: 1.View Engine的变化. asp.net mvc 3中添加了Razor这个View engine. 如果你在创建的项目中同时有Index.aspx和Index.cshtml, 默认的MVC会选择aspx 的view来显示.但是你可以通过在Global.asax文件中的Application_Start方法中添加如下代码来让MVC先去执行Razor Engine的I

ASP.NET MVC 3 Beta新特性以及.Net开源的趋势----最新译文

NuPack – .NET的开源软件包管理器 NuPack是一个开源的软件包管理器,它使你在项目中能够更加容易的查找.安装和使用.NET 库.它能够和所有的.NET 项目类型很好的一起工作(包括,没有任何限制的,ASP.NET Web Forms和ASP.NET MVC). NuPack 使维护开源项目的开发者(例如, Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks, Elmah, 等等) 能够去打包他们的库,