决定一个人富有的三个条件,一是出身,二是运气,三是努力
If you can dream it,you can do it! Nothing Impossible~

      看到这个标题,就会想到这是微软提供的一个免费的画图控件,可以再VS2005和VS2008里应用,单纯的从样例效果来看是相当不错,也可以满足大部分需求和应用。如果仔细研究,就会发现存在问题。它其实就是Dundas Chart产品的一个老版本 4.0以前的,目前Dundas已经升级到7.0版本了,并且增加了许多新的功能,但是价格也不低,可以根据情况选择适合的;后面也试过ChartDirector这个控件,说实话这个功能也挺强大,并且支持的语言多,价格还低,如果掏钱的话,选择它是不错的。

      这个工作是本人去年完成的事情,当时忙也没来得及写入blog,最近有时间就把原来的一些经验分享一下,也方便自己以后再用。

      经过本人对MSchart功能的简单测试,发现它最多只能有两个Y轴和两个X轴,并且位置也是固定的,只能在上、下、左、右显示,不能在同一侧并行显示,绘制多饼图需要自行处理才能实现,本身不包含多饼图的类型,并且也不包含仪表盘类型的图,其余大部分类型还是有滴。譬如函数的功能:总计、平均值……由于时间紧迫,没测试。

     然而Dundas Chart最新的版本中已经包含这些功能,还有一个工具条包含打印、预览、样式等功能,也可以自己定义自己想要的功能,并且还可以在图形上轻松实现右键菜单的功能。

    下面是对MSchart做的一个简单的示例:

   

代码
 1 public void Point()
 2     {
 3         //创建图形区域
 4         ChartArea carea1 = new ChartArea();
 5         ChartArea carea2 = new ChartArea();
 6         carea1.Name = "carea1";
 7         carea2.Name = "carea2";
 8         //创建画布
 9         Chart chart1 = new Chart();
10         chart1.Width = 400;
11         chart1.Height = 400;
12 
13         chart1.ChartAreas.Add(carea1);
14         chart1.ChartAreas.Add(carea2);
15         
16         //图形属性设置
17         chart1.ImageLocation = "ChartPic_#SEQ(300,3)";
18         chart1.ImageStorageMode = ImageStorageMode.UseHttpHandler;
19         chart1.ImageType = ChartImageType.Png;
20         chart1.RenderType = RenderType.ImageTag;
21         //chart1.ViewStateContent = SerializationContents.Default;
22         chart1.Palette = ChartColorPalette.BrightPastel;
23 
24         
25         //Y轴属性设置
26         carea1.AxisX.IsStartedFromZero = false;
27         carea1.AxisY.IsStartedFromZero = true;
28         carea1.AxisX.Title = "日期";
29         carea1.AxisY.Title = "数量";
30         
31         //添加标题
32         Title title = new Title();
33         title.Text = "测试MSChart";
34         chart1.Titles.Add(title);
35 
36         //添加图例
37         Legend leg = new Legend();
38         leg.LegendStyle = LegendStyle.Column;
39         chart1.Legends.Add(leg);
40 
41         Axis axis1 = new Axis();
42 
43          //创建的3个系列 快速线形、散点、气泡
44         Series series = new Series();
45         series.ChartType = SeriesChartType.FastLine;
46         series.ChartArea = "carea1";
47         Series series0 = new Series();
48         series0.ChartType = SeriesChartType.Point;
49         series0.ChartArea = "carea1";
50         Series series1 = new Series();
51         series1.ChartType = SeriesChartType.Bubble;
52         series1.ChartArea = "carea2";
53 
54         //系列上点显示的样式 如:圆形、菱形、矩形……
55         series.MarkerStyle = MarkerStyle.Circle;
56         series.BorderWidth = 3;
57         series.ShadowOffset = 2;
58 
59         //对系列添加数据点
60         series.Points.AddXY(0,30);
61         series.Points.AddXY(1,67);
62         series.Points.AddXY(2,57);
63         series.Points.AddXY(3,83);
64         series.Points.AddXY(4,23);
65         series.Points.AddXY(5,70);
66         series.Points.AddXY(6,60);
67         series.Points.AddXY(7,90);
68         series.Points.AddXY(8,20);
69 
70         series0.Points.AddXY(570);
71         series0.Points.AddXY(660);
72         series0.Points.AddXY(790);
73         series0.Points.AddXY(820);
74 
75         series1.Points.AddXY(030);
76         series1.Points.AddXY(167);
77         series1.Points.AddXY(257);
78         series1.Points.AddXY(383);
79         series1.Points.AddXY(423);
80 
81         // 添加3个图形系列
82         chart1.Series.Add(series);
83         chart1.Series.Add(series0);
84         chart1.Series.Add(series1);    
85         //设置X、Y为主坐标轴
86         chart1.Series[0].XAxisType = AxisType.Primary;
87         chart1.Series[0].YAxisType = AxisType.Primary;
88 
89         Panel1.Controls.Add(chart1);
90         //实现鼠标移动到数据点上显示数据
91         chart1.Series[0].ToolTip = "X value \t= #VALX{d}\nY value \t= #VALY{D}";
92         //可以加载一个含有数据的xml文件
93         //chart1.LoadTemplate(this.MapPath("" + ".xml"));
94     }

      

     效果图如下:      

 

       如果大家有其它什么疑问,欢迎提出,共同交流、学习~

 

 

posted on 2010-01-21 15:29  ZEKELOVE  阅读(5365)  评论(9编辑  收藏  举报