ASP.NET MVC 3 Beta中超酷的Chart
创始人
2024-07-16 07:10:55
0

前面一篇文章: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代码:

  1. public ActionResult BasicChart(){           
  2.    return View();       
  3.    } 

BasicChart.cshtml代码:

  1.     @{      

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

     

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

运行效果:

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

定义一个Action:

  1. public ActionResult ShowBasicChart()  
  2.  {          
  3.     return View();     
  4.      } 

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

  1.  

     

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

第二种方式:数据库查询

示例:

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

第三种方式:XML示例:

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

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

2、Chart的显示:

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

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

效果:

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

代码

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

效果:

3、Chart保存

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

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

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

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

将Chart保存为图片:

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

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

保存之后的图片:

将Chart保存为保存为XML:

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

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

代码

  1.     
  2.       
  3.         
  4.           
  5.          
  6.          
  7.          
  8.          
  9.          
  10.          
  11.          
  12.          
  13.        
  14.       
  15.     
  16.     
  17.      
  18.      
  19.     
  20.     
  21.     
  22.       
  23.     
  24.  

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

原文标题:ASP.NET MVC 3 Beta初体验之超酷的Chart

链接:http://www.cnblogs.com/zhuqil/archive/2010/10/20/asp-net-mvc-3-chart.html

【编辑推荐】

 

  1. 详解ASP.NET MVC 3 beta新特性
  2. ASP.NET MVC 3让依赖注入实现得更简单
  3. 详解ASP.NET MVC 3 beta新特性
  4. ASP.NET MVC 3新特性与NuPack功能详解
  5. .NET开发人员应该关注的七个开源项目

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...