微软图表控件MsChart使用初探

      昨天在网上看到了微软发布了.NET 3.5框架下的图表控件,第一时间抓下来看了一下,发觉功能很强劲,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显,只能在最新的开发环境中使用,需要.Net 3.5 Sp1以及VS 2008的开发环境。

下面是下载地址:

    控件:Microsoft .NET Framework 3.5 的 Microsoft 图表控件(Microsoft Chart Controls for Microsoft .NET Framework 3.5)–

  1. 包含英文版,中文版。上面提供的链接是中文版的,可以更改为英文版。

  2. Microsoft .NET Framework 3.5 的Microsoft 图表控件 的语言包,包含23中语言。

  3. Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008

    这个只有英文的,没找到中文的。

  4. 文档 (Microsoft Chart Controls for .NET Framework Documentation)

    这个只有英文的,没找到中文的。

  5. WinForm 和 Asp.net的例子(Samples Environment for Microsoft Chart Controls) –

    这个只有英文的,没找到英文的。

 下了它的示例程序后,运行了一下,非常的强大,可以支持各种各样的图形显示,常见的:点状图、饼图、柱状图、曲线图、面积图、排列图等等,同时也支持3D样式的图表显示,不过我觉得最有用的功能还是支持图形上各个点的属性操作,它可以定义图形上各个点、标签、图形的提示信息(Tooltip)以及超级链接、Javascript动作等,而不是像其它图形类库仅生成一幅图片而已,通过这些,加上微软自己的Ajax框架,可以建立一个可以互动的图形统计报表了。

一。安装

     控件的安装相对比较简单,下载完后,先执行“MSChart.exe”程序,它会自动检测你的环境,安装到系统目录中去,如果要在VS 2008环境中直接使用,那么需要安装For Vs2008的插件,MSChart_VisualStudioAddOn.exe,还有一个中文语言包MSChartLP_chs.exe。安装完后,打开Vs2008,在建立项目的时候,你就能在工具栏中看到有一个Chart的控件了,如下图:

二。使用

    安装好后,建立一个.NET3.5的Web项目,像使用普通控件一样拖放到要使用的Web界面即可。初步研究了一下,整个图形控件主要由以下几个部份组成:

1.Annotations --图形注解集合

2.ChartAreas  --图表区域集合

3.Legends      --图例集合

4.Series    --图表序列集合(即图表数据对象集合)

5.Titles    --图标的标题集合

Annotations注解集合

     Annotations是一个对图形的一些注解对象的集合,所谓注解对象,类似于对某个点的详细或者批注的说明,比如,在图片上实现各个节点的关键信息,如下图方框和黄色的小方框:

  一个图形上可以拥有多个注解对象,可以添加十多种图形样式的注解对象,包括常见的箭头、云朵、矩行、图片等等注解符号,通过各个注解对象的属性,可以方便的设置注解对象的放置位置、呈现的颜色、大小、文字内容样式等常见的属性。

ChartAreas图表区域集合

    ChartAreas可以理解为是一个图表的绘图区,例如,你想在一幅图上呈现两个不同属性的内容,一个是用户流量,另一个则是系统资源占用情况,那么你要在一个图形上绘制这两种情况,明显是不合理的,对于这种情况,可以建立两个ChartArea,一个用于呈现用户流量,另一个则用于呈现系统资源的占用情况。

    当然了,图表控件并不限制你添加多少个绘图区域,你可以根据你的需要进行添加。对于每一个绘图区域,你可以设置各自的属性,如:X,Y轴属性、背景等。

    需要注意的是,绘图区域只是一个可以作图的区域范围,它本身并不包含要作图形的各种属性数据。

    多绘图区效果图如下,分为上下两个绘图区域,分别表示不同的绘图数据:

   Legends图例集合

    Legends是一个图例的集合,即标注图形中各个线条或颜色的含义,同样,一个图片也可以包含多个图例说明,比如像上面说的多个图表区域的方式,则可以建立多个图例,每别说明各个绘图区域的信息,具体的图例配置说明此处就不详细说明了,可以参考一下官网的例子,写得丰富的详细了:)也上一张图例的效果图吧~

Series图表序列

     图表序列,应该是整个绘图中最关键的内容了,通俗点说,即是实际的绘图数据区域,实际呈现的图形形状,就是由此集合中的每一个图表来构成的,可以往集合里面添加多个图表,每一个图表可以有自己的绘制形状、样式、独立的数据等。

    需要注意的是,每一个图表,你可以指定它的绘制区域(见ChartAreas的说明),让此图表呈现在某个绘图区域,也可以让几个图表在同一个绘图区域叠加,如下图:

上面两幅图,分别表示了把图表放在不同的绘制区域和放在同一个绘制区域的情况。

     继续回到ChartAreas章节举的例子,同时要显示用户的流量还要显示系统的占用情况,对于这种时候,应该建立两个Series,一个用于呈现用户的流量,另一个则用于呈现系统的占用情况。它们分别属于各自的绘图区域。

Titles标题合集

    根据字面含义即可以理解,是图表的标题配置,同样可以添加多个标题,以及设置标题的样式及文字、位置等属性。多看一下它的属性即能明白各自的含义。

三。其它属性

    相对来说,我觉得比较有用的属性有三个,分别是:Label、Tooltip以及Url链接。

    Label即标签的含义,可以在图片的关键位置进行一些关键数字或文字的描述,如下图:

像上图:X轴和Y轴的文字便是标签,以及图表曲线中的红点上的文字,也是标签,添加了标签,可以让人更容易的对内容进行理解。

    Tooltip即提示的含义,用于在各个关键点,如:标签、图形关键点、标题等当鼠标移动上去的时候,提示用户一些相关的详细或说明信息,例如上图,可以给曲线中的每一个点增加Tooltip的属性,写上需要详细说明的内容,比如:详细的销售明细,那么,在鼠标移动到这个点的时候,会自动弹出提示信息。

    Tooltip可以支持简单方式以及自定义的方式,简单方式即像平时Html页面设置的title之类的属性效果,而自定义的方式,则可以实现图形、文本等各种复杂的提示信息显示。详细的方式请参考官方例子的:Interactivity and AJAX/Tooltips以及Interactivity and AJAX/Client Side Scripts下面的相关例子。

    Url链接,图表控件中,有一大半的控件都有Url及Tooltip的属性,你可以设置此属性,在鼠标点击的时候,代到其它相应的页面去。

   建议大家看看官方例子中的Interactivity and AJAX部份,很精彩:)

例子:建立一个Cpu信息和内存使用的实时统计表

    下面写一个小例子,建立一个系统的内存实时统计图表,使用到了Ajax的方法,以及Windows Api取得系统内存的方法。

    首先,建立一个Aspx页面,拖动一个图表控件到页面,设置图表控件的属性如下:

   其中,MEMORY_INFO,ComputerInfo是一个定义的结构体及调用Win32 API接口的一个访问类。程序分别取得每一个图表对象,每次加载的时候,都重新取得当前的内存和Cpu信息,再在图表上添加一个点,需要注意的是,一定要设置图表控件的EnableViewState属性为True,否则无法记录状态。

 

Code

 

 

一共建立了两个绘图区,一个用于呈现内存使用情况的在ChartArea1区域,另一个则是呈现Cpu使用情况的,放置在ChartArea2区域了。一共有三个图表,分别表示已使用的物理内存、全部占用的物理内存,以及Cpu使用显示的情况。

添加一个Ajax的计时器以及Ajax的ScriptManager,UpdatePanel,把计时器和图表控件都拖进UpdatePanel里面。设置计时器的间隔时间为一秒钟(1000),双击计时器,写如下代码:

Code

 

 

 

   附上取得内存信息的类代码:

 

Code

 

    运行的效果图如下:

   先写到这里吧~呵呵,第一次写教程,经验不足,希望各位提点意见哈~到时再看看有没有必要再继续写一篇。

posted @ 2008-11-07 12:01 顺炽国 阅读(48602) 评论(42) 编辑 收藏

 回复 引用   
#1楼 2008-11-07 12:43 | cobrayang[未注册用户]
感谢LZ分享,顶你没商量,期待后文!
 回复 引用 查看   
#2楼 2008-11-07 12:47 | 菌哥      
不错,支持一下!
 回复 引用 查看   
#3楼 2008-11-07 13:22 | 深蓝      
相当不错。很漂亮。需要的时候也用一下
 回复 引用 查看   
#4楼 2008-11-07 13:37 | 思考-总结      
LZ能不能详细说下它支持的功能,比如类似水晶报表的 交叉表,子父表 等功能,如果做比较复杂的报表,以上说的两个功能,用到的地方还真不少。
 回复 引用   
#5楼 2008-11-07 14:04 | chenpeter[未注册用户]
LZ,其实只需要.net 2.0的支持就可以了
 回复 引用 查看   
#6楼 2008-11-07 14:34 | 高义      
安装了 还没弄懂怎么使用
 回复 引用 查看   
#7楼 2008-11-07 14:34 | bidaas      
基于Silverlight?
 回复 引用 查看   
#8楼 2008-11-07 15:20 | 中华小鹰      
好像是微软收购的
 回复 引用 查看   
#9楼 2008-11-07 15:48 | 扬哥      
这套图表是:Dundas 的,之前公司还想花钱买,没有想到3.5 asp1就提供了。太爽啦。
 回复 引用   
#10楼 2008-11-07 16:44 | xiongxing[未注册用户]
顶,期待下文啊
 回复 引用 查看   
#11楼 2008-11-07 17:47 | 暗点      
MSChart.exe 这个我下载了安装了为什么DATA中没有 chart 呢?
我的是VISTA 系统 VS2008 SP1

不过ASP.NET的那个CHART 例子我可以打开.
 回复 引用   
#12楼 2008-11-07 18:24 | I am aspnetx[未注册用户]
看上去和dundas的很像
我相对更关注silverlight下的chart,因为要说RIA还是还是它更灵活些
 回复 引用   
#13楼 2008-11-07 18:54 | xinerzhui[未注册用户]
看样子也像dundas,属性名也像.
 回复 引用 查看   
#14楼 2008-11-07 19:51 | thyking Xiao      
这个可以说就是dundas第二了
 回复 引用 查看   
#15楼 2008-11-07 20:29 | bluesky4485      
第6点和第4点链接地址是一样的。
麻烦检查下。
 回复 引用 查看   
#16楼 2008-11-07 23:45 | 大菜鸟      
不错,太好了
 回复 引用 查看   
#17楼 2008-11-08 10:24 | 齐.net      
哇,这个不错
 回复 引用 查看   
#18楼[楼主] 2008-11-10 17:38 | 顺炽国      
@bluesky4485
呵呵,谢谢指出哈,第6点的东西在第7点的下载连接里面都有了:)
 回复 引用   
#19楼 2008-11-11 08:48 | ziyouyong[未注册用户]
这个图片控件有没有for .net 2.0的?
 回复 引用 查看   
#20楼 2008-11-11 09:43 | 大熊&小宝      
@ziyouyong
有是有,就是要收费=。=
就是Dundas 的
 回复 引用   
#21楼 2008-11-14 08:27 | what is?[未注册用户]
我有Dundas.Chart/webfrom/web的最新破解,谁用找我要,
我2003前就使用Dundas.Chart.了。
aspx@hotmail.com
 回复 引用   
#22楼 2008-11-22 15:58 | david2350[未注册用户]
我最近开始用的MSChart
发现一个问题不知如何解决
就是当X轴上的列过多时,比如20
系统就会只显示5, 10, 15, 20这些值,而不会显示所有
我想显示所有的asixlabel,如何实现?
谢谢
 回复 引用   
#23楼 2008-12-04 10:44 | smallolo[未注册用户]
Tyear int null
TMonth int null
tDay int null
tCount int null 里面有若干数据
----------------------------------------------------
string sqlLink = "data source=.;database=Northwind;uid=sa;pwd=****";
SqlConnection conn = new SqlConnection(sqlLink);
conn.Open();
string textCmd = "SELECT * FROM [Test]";
DataSet DS = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(textCmd, conn);
da.Fill(DS);
ChartVisitor.DataSource = DS;
ChartVisitor.Series["IP"].XValueMember = "TDay";
ChartVisitor.Series["IP"].YValueMembers = "TCount";
conn.Close();
--------------------------
问题:为什么我x轴绑定的数据他给我变成了时间形式了呢??
 回复 引用   
#24楼 2008-12-04 10:48 | smallolo[未注册用户]
数据:
Tyear tMonth tDay tCount
2008 1 1 1
2008 2 2 2
2008 3 3 3

x 轴的数据显示:1899-12-30 1899-12-31 1900-1-1
为什么不是 1 2 3 呢?
y 轴的数据显示正常
 回复 引用   
#25楼 2008-12-04 11:10 | smallolo[未注册用户]
看的不够仔细,打扰了

XValueType="Int32" 设置下就OK 了
 回复 引用   
#26楼 2008-12-22 12:13 | ansonlau[未注册用户]
我也遇到这个问题,在 <ChartAreas>

<AxisX Interval="1">
</AxisX>

</ChartAreas>
将axisx的interval的auto设置成1就都显示
 回复 引用   
#27楼 2009-03-30 20:41 | 编程菜鸟
感谢楼主,期待跟多内容!
 回复 引用   
#28楼 2009-05-31 18:35 | 欢欢快快乐乐[未注册用户]
为什么一发布统计图就报错了呢
这个错
Invalid temp directory in chart handler configuration [c:\inetpub\wwwroot\tempImages\].
c:\inetpub\wwwroot这个是我网站的发布路径
 回复 引用   
#29楼 2009-06-24 22:34 | szdaiy[未注册用户]
@欢欢快快乐乐
在web.config修改参数:
<add key="ChartImageHandler" value="Storage=file;Timeout=20;Url=~/tempImages/;"/>
 回复 引用   
#30楼 2009-12-08 09:24 | 6ysnow[未注册用户]
Invalid temp directory in chart handler configuration [c:\inetpub\wwwroot\tempImages\].

这个错误我也遇到了,咋个回事??web.config中也是这个配置啊!
 回复 引用 查看   
#31楼 2010-05-26 18:52 | tiyaoli      
学习了!感谢你的分享!
我想请教一下怎么设置X轴,使其最终达到的效果就如Excel图表中的折线散点图那样,我现在做出来的效果是图表中的每一个点投影到X轴的间距都一样的!也就是说我想让X轴具有像Y轴一样的效果!
 回复 引用 查看   
#32楼 2010-07-13 22:21 | 奥尔格勒      
谢谢了,正是需要的
 回复 引用 查看   
#33楼 2010-08-31 13:23 | 嗜血清清      
lz我使用ms chart发觉他的 宽度和高度 每次都是设置死的,可以根据页面百分比,或者设置x轴固定间距而达到预期的效果吗??
 回复 引用 查看   
#34楼 2010-10-31 18:50 | 哈尔滨☆叶子      
你好,我x轴也是文字太多,我用了Interval="1" 但是文字是竖着一列,但都是倾倒的。用TextOrientation=Rotated90等无效,后来用IsLabelAutoFit="False",文字正过来了,但是文字太长,竖着一排,下面出现了省略号,请教如何处理,谢谢。 我调整高度,但是没有效果。应该有类似调整下边距的属性吧?
 回复 引用 查看   
#35楼 2010-11-05 02:44 | 悦耳悠扬      
感觉分享。
 回复 引用 查看   
#36楼 2010-11-16 10:09 | 随智阔      
牛啊.
 回复 引用 查看   
#37楼 2011-02-12 15:34 | Yayba      
很好很强大
 回复 引用 查看   
#38楼 2011-04-20 10:52 | 诗丝      
很好啊!
 回复 引用 查看   
#39楼 2011-04-20 10:59 | 诗丝      
这两个在哪里下载啊?MSChart_VisualStudioAddOn.exe和MSChartLP_chs.exe
 回复 引用 查看   
#40楼 2011-05-23 13:49 | tangqiaoning      
我在写这个例子的时候,用iis部署之后,不能打开,有错误提示
--------------------------------------------------------------------------------

对注册表项“Global”的访问被拒绝。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.UnauthorizedAccessException: 对注册表项“Global”的访问被拒绝。

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。

要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。

源错误:


行 19: public partial class Default3 : System.Web.UI.Page
行 20: {
行 21: static PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total");
行 22:
行 23: protected void Page_Load(object sender, EventArgs e)


源文件: e:\website\WebSite1\Default3.aspx.cs 行: 21

请问这个是什么原因引起的?
 回复 引用 查看   
#41楼 2011-08-25 10:35 | 黑山老雕      
马克,好东西。
 回复 引用 查看   
#42楼 2011-10-18 16:47 | 火星大能猫      
十多年来,Dundas Data Visualization公司在适用于微软技术的先进数据可视化解决方案中一直领先于其它公司。2007年, 微软收购了Dundas的部分产品线,包括

• Dundas Chart for ASP.NET (Professional and Enterprise)
• Dundas Chart for Window Forms (Professional and Enterprise)
• Dundas Chart for SharePoint
• Dundas Chart for SQL Server Reporting Services
• Dundas Chart for OLAP Services
• Dundas Gauge for ASP.NET
• Dundas Gauge for Windows Forms
• Dundas Gauge for SharePoint
• Dundas Gauge for SQL Server Reporting Services
• Dundas Map for ASP.NET
• Dundas Map for Windows Forms
• Dundas Map for SQL Server Reporting Services
• Dundas Calendar for SQL Server Reporting Services

(请注意 Dundas Dashboard 不包含其中)

在这之后, 微软仍然授权Dundas销售以上产品,控件中国网也随之继续销售以上产品(控件中国网为Dundas公司在中国直属核心代理商) 这协议一直持续到2010年10月31号,2010年10月31号以后,Dundas公司将在全球范围内停止销售以上产品,但是Dundas并不会消失,而是会一直存在下去,并且为客户提供更好更全面的数据展示分析产品,控件中国网也仍然是Dundas公司在中国的代理商和技术服务商。(以上产品很有可能出现在微软的相关开发平台中,请等待我们提供最新的相关消息)

通知:控件中国网和Dundas在2010年10月31号以后,在全球范围内停止销售以上产品(请注意 Dundas Dashboard 不包含其中,仍然继续销售)

已经购买客户的技术支持和升级服务将持续到2011年10月




Dundas 将在以后的日子里面专注于 data visualization 和 dashboarding 解决方案, 新的 dashboarding 平台, Dundas Dashboard, 同样会在中国市场上销售,并且为客户解决实际的问题。

非常感谢我们的客户多年来给予Dundas和控件中国网的支持,请继续关注我们,继续关注Dundas推出的新产品,您可以继续在控件中国网获取Dundas的新产品和技术支持。