利用MsChart控件动态生成通用在线图表
- 格式:doc
- 大小:25.00 KB
- 文档页数:4
用Chart控件绘制动态图表---- 进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量。
ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用。
本文仅以VC++为例说明Chart控件的使用。
---- Chart控件指Mschart.ocx(5.0版)或Mschrt20.ocx(6.0 版),是Visual Studio自带的ActiveX控件之一,其属性、事件很多,功能非常强大,可实现柱状直方图、曲线走势图、饼状比例图等,甚至可以是混合图表,可以是二维或三维图表,可以带或不带坐标系,可以自由配置各条目的颜色、字体等等。
一安装和使用Chart控件----在用到Chart控件的项目中安装该控件:从Project->Add to Project ->Components And Controls->Registered Active Xcontrols,选择Chart控件,则ClassWizard会生成相应的C++类,其中类CMSChart是由CWnd派生来的,它是Chart 控件的主要类,其他的类全部是由COleDispatchDriver派生来,控制控件中的相应对象,完成各部分相关功能,如CvcAxis类是实现坐标轴相关功能的源代码。
同时在项目的控件工具箱上会出现代表Chart控件的按钮,使用时把Chart控件按钮从工具箱拖到对话框中,调整大小即可。
----Chart控件至少有45个属性、9个方法、49个事件,在这里就不一一列举了。
---- 在设计中,我们可以在主要属性页里修改各属性的属性值:右击对话框窗口中的Chart控件,选择“Properties”菜单项,就会弹出主要属性页对话框,对其中各属性值进行设置。
有些属性在主要属性页里没有列出,只能编程修改。
另外要动态绘制图表,必须掌握对控件的编程控制。
---- 首先在对话框类中定义控件变量,以便编程时操纵控件。
用MicrosoftChartControls(MSChart)实现曲线图,并支持拖动放大到秒本文用MSChart实现Winform曲线图的绘制,本文结合自己的实际项目,每个点需要显示到秒(这也是本文需要解决的关键点),刚开始照着网上的例子实现了一下,样子是出来了,但是当数据一多并且显示到秒时用鼠标进行拖动放大页面会直接卡死,后来经过自己的一番探索和研究,终于把这个问题给解决了,故把整个实现过程记录下来,和大家分享一下。
在文章的后面附上了源码,源码有详细的代码注释,一些需要注意的属性设置都有说明,可以实现刻度到秒的拖动放大,两条红色分别我定义是Min和Max值基准,是为了表达一个区间的概念。
页面上绘制了一千个点,每个点上有相应的T oolTip提示。
代码没有做拆分,只是把整个创建及设置的流程给描述下来,是为了让需要的朋友更好的理解和使用,第一次写博文,希望大家给予指正与支持,谢谢。
附上效果图:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;usingSystem.Windows.Forms.DataVisualization.Charting; using Hyet.Dal;using Hxj.Model;using Hxj.Data;using System.Collections;using Hyet.BLL;namespace DigitalFactory.ReportForms{public partial class ChartInfo : Form{public ChartInfo(){InitializeComponent();InitializeChart();this.myChart.GetToolTipText = newEventHandler<ToolTipEventArgs>(myChart_GetToolTi pText);}private void InitializeChart(){myChart.ChartAreas.Clear();myChart.Series.Clear();#region 设置图表的属性//图表的背景色myChart.BackColor = Color.FromArgb(211, 223, 240); //图表背景色的渐变方式myChart.BackGradientStyle =GradientStyle.TopBottom;//图表的边框颜色、myChart.BorderlineColor = Color.FromArgb(26, 59, 105);//图表的边框线条样式myChart.BorderlineDashStyle = ChartDashStyle.Solid; //图表边框线条的宽度myChart.BorderlineWidth = 2;//图表边框的皮肤myChart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;#endregion#region 设置图表的标题Title title = new Title();//标题内容title.Text = '曲线图';//标题的字体title.Font = new System.Drawing.Font('Microsoft Sans Serif', 12, FontStyle.Bold);//标题字体颜色title.ForeColor = Color.FromArgb(26, 59, 105);//标题阴影颜色title.ShadowColor = Color.FromArgb(32, 0, 0, 0);//标题阴影偏移量title.ShadowOffset = 3;myChart.Titles.Add(title);#endregion#region 设置图例的属性//注意,需要把原来控件自带的图例删除掉this.myChart.Legends.Clear();Legend legend = new Legend('Default');legend.Alignment = StringAlignment.Center; legend.Docking = Docking.Bottom;legend.LegendStyle = LegendStyle.Column;this.myChart.Legends.Add(legend);// Add header separator of type linelegend.HeaderSeparator = LegendSeparatorStyle.Line; legend.HeaderSeparatorColor = Color.Gray;LegendCellColumn firstColumn = new LegendCellColumn();firstColumn.ColumnType = LegendCellColumnType.SeriesSymbol; firstColumn.HeaderText = 'Color';firstColumn.HeaderBackColor = Color.WhiteSmoke;myChart.Legends['Default'].CellColumns.Add(firstColu mn);// Add Legend Text columnLegendCellColumn secondColumn = new LegendCellColumn();secondColumn.ColumnType = LegendCellColumnType.Text;secondColumn.HeaderText = 'Name'; secondColumn.Text = '#LEGENDTEXT'; secondColumn.HeaderBackColor = Color.WhiteSmoke; myChart.Legends['Default'].CellColumns.Add(secondC olumn);// Add AVG cell columnLegendCellColumn avgColumn = new LegendCellColumn();avgColumn.Text = '#AVG{N2}';avgColumn.HeaderText = 'Avg'; = 'AvgColumn';avgColumn.HeaderBackColor = Color.WhiteSmoke; myChart.Legends['Default'].CellColumns.Add(avgColu mn);// Add Total cell columnLegendCellColumn totalColumn = new LegendCellColumn();totalColumn.Text = '#TOTAL{N1}';totalColumn.HeaderText = 'Total'; = 'TotalColumn'; totalColumn.HeaderBackColor = Color.WhiteSmoke; myChart.Legends['Default'].CellColumns.Add(totalCol umn);// Set Min cell column attributes LegendCellColumn minColumn = new LegendCellColumn();minColumn.Text = '#MIN{N1}';minColumn.HeaderText = 'Min'; = 'MinColumn';minColumn.HeaderBackColor = Color.WhiteSmoke; myChart.Legends['Default'].CellColumns.Add(minColu mn);// Set Max cell column attributes LegendCellColumn maxColumn = new LegendCellColumn();maxColumn.Text = '#MAX{N1}';maxColumn.HeaderText = 'Max'; = 'MaxColumn';maxColumn.HeaderBackColor = Color.WhiteSmoke; myChart.Legends['Default'].CellColumns.Add(maxColu mn);#endregion#region 设置图表区属性ChartArea chartArea = new ChartArea('Default');//设置Y轴刻度间隔大小chartArea.AxisY.Interval = 5;//设置Y轴的数据类型格式//belStyle.Format = 'C';//设置背景色chartArea.BackColor = Color.FromArgb(64, 165, 191, 228);//设置背景渐变方式chartArea.BackGradientStyle =GradientStyle.TopBottom;//设置渐变和阴影的辅助背景色chartArea.BackSecondaryColor = Color.White;//设置边框颜色chartArea.BorderColor = Color.FromArgb(64, 64, 64, 64);//设置阴影颜色chartArea.ShadowColor = Color.Transparent;//设置X轴和Y轴线条的颜色chartArea.AxisX.LineColor = Color.FromArgb(64, 64, 64, 64);chartArea.AxisY.LineColor = Color.FromArgb(64, 64, 64, 64);//设置X轴和Y轴线条的宽度chartArea.AxisX.LineWidth = 1;chartArea.AxisY.LineWidth = 1;//设置X轴和Y轴的标题chartArea.AxisX.Title = '时间';chartArea.AxisY.Title = '数值';//设置图表区网格横纵线条的颜色chartArea.AxisX.MajorGrid.LineColor =Color.FromArgb(64, 64, 64, 64);chartArea.AxisY.MajorGrid.LineColor =Color.FromArgb(64, 64, 64, 64);//设置图表区网格横纵线条的宽度chartArea.AxisX.MajorGrid.LineWidth = 1; chartArea.AxisY.MajorGrid.LineWidth = 1;//设置坐标轴刻度线不延长出来chartArea.AxisX.MajorTickMark.Enabled = false; chartArea.AxisY.MajorTickMark.Enabled = false;//开启下面两句能够隐藏网格线条//chartArea.AxisX.MajorGrid.Enabled = false;//chartArea.AxisY.MajorGrid.Enabled = false;//设置X轴的显示类型及显示方式chartArea.AxisX.Interval = 0; //设置为0表示由控件自动分配chartArea.AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;chartArea.AxisX.IntervalType = DateTimeIntervalType.Minutes;belStyle.IsStaggered = true;//chartArea.AxisX.MajorGrid.IntervalType = DateTimeIntervalType.Minutes;//belStyle.IntervalType = DateTimeIntervalType.Minutes;belStyle.Format = 'yyyy-MM-dd HH:mm:ss';//设置文本角度//belStyle.Angle = 45;//设置文本自适应chartArea.AxisX.IsLabelAutoFit = true;//设置X轴允许拖动放大chartArea.CursorX.IsUserEnabled = true; chartArea.CursorX.IsUserSelectionEnabled = true; chartArea.CursorX.Interval = 0;chartArea.CursorX.IntervalOffset = 0;chartArea.CursorX.IntervalType = DateTimeIntervalType.Minutes;chartArea.AxisX.ScaleView.Zoomable = true; chartArea.AxisX.ScrollBar.IsPositionedInside = false;//设置中短线(还没看到效果)//chartArea.AxisY.ScaleBreakStyle.Enabled = true;//chartArea.AxisY.ScaleBreakStyle.CollapsibleSpaceThr eshold = 47;//chartArea.AxisY.ScaleBreakStyle.BreakLineStyle = BreakLineStyle.Wave;//chartArea.AxisY.ScaleBreakStyle.Spacing = 2;//chartArea.AxisY.ScaleBreakStyle.LineColor = Color.Red;//chartArea.AxisY.ScaleBreakStyle.LineWidth = 10;myChart.ChartAreas.Add(chartArea);#endregion//线条2:主要曲线Series series = new Series('Default');//设置线条类型series.ChartType = SeriesChartType.Line;//线条宽度series.BorderWidth = 1;//阴影宽度series.ShadowOffset = 0;//是否显示在图例集合Legendsseries.IsVisibleInLegend = true;//线条上数据点上是否有数据显示series.IsValueShownAsLabel = true;//线条颜色series.Color = Color.MediumPurple;//设置曲线X轴的显示类型series.XValueType = ChartValueType.DateTime;//设置数据点的类型series.MarkerStyle = MarkerStyle.Circle;//线条数据点的大小series.MarkerSize = 5;myChart.Series.Add(series);//手动构造横坐标数据DataTable dataTable = new DataTable(); dataTable.Columns.Add('TheTime',typeof(DateTime)); //注意typeofdataTable.Columns.Add('TheValue', typeof(double)); //注意typeofRandom random = new Random(); //随机数DateTime dateTime = System.DateTime.Now;for (int n = 0; n < 3; n ){dateTime = dateTime.AddSeconds(10);DataRow dr = dataTable.NewRow();dr['TheTime'] = dateTime;dr['TheValue'] = random.Next(0, 101);dataTable.Rows.Add(dr);}for (int n = 3; n < 1000; n ){dateTime = dateTime.AddSeconds(30); DataRow dr = dataTable.NewRow();dr['TheTime'] = dateTime;dr['TheValue'] = random.Next(0, 101); dataTable.Rows.Add(dr);}//线条1:下限横线Series seriesMin = new Series('Min'); seriesMin.ChartType = SeriesChartType.Line; seriesMin.BorderWidth = 1;seriesMin.ShadowOffset = 0;seriesMin.IsVisibleInLegend = true;seriesMin.IsValueShownAsLabel = false; seriesMin.Color = Color.Red;seriesMin.XValueType = ChartValueType.DateTime; seriesMin.MarkerStyle = MarkerStyle.None; myChart.Series.Add(seriesMin);//线条3:上限横线Series seriesMax = new Series('Max');seriesMax.ChartType = SeriesChartType.Line; seriesMax.BorderWidth = 1;seriesMax.ShadowOffset = 0;seriesMax.IsVisibleInLegend = true;seriesMax.IsValueShownAsLabel = false; seriesMax.Color = Color.Red;seriesMax.XValueType = ChartValueType.DateTime; seriesMax.MarkerStyle = MarkerStyle.None; myChart.Series.Add(seriesMax);//设置X轴的最小值为第一个点的X坐标值chartArea.AxisX.Minimum =Convert.ToDateTime(dataTable.Rows[0]['TheTime']).To OADate();//开始画线foreach (DataRow dr in dataTable.Rows){series.Points.AddXY(dr['TheTime'], dr['TheValue']);seriesMin.Points.AddXY(dr['TheTime'], 15); //设置下线为15seriesMax.Points.AddXY(dr['TheTime'], 30); //设置上限为30}}private void myChart_GetToolTipText(object sender, ToolTipEventArgs e){if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint){int i = e.HitTestResult.PointIndex;DataPoint dp = e.HitTestResult.Series.Points[i];e.Text = string.Format('时间:{0},数值:{1:F1} ', DateTime.FromOADate(dp.XValue), dp.YValues[0]); }}}}。
利用MsChart控件动态生成通用在线图表作者:孙仁鹏来源:《软件导刊》2011年第01期摘要:为了将已有的数据在线生成所需的图表,提出了利用微软的MsChart控件设计通用在线图表的方法。
首先对为什么及如何灵活获取数据源进行了分析,并提出了在线录入和动态调用Web服务两种方法。
有了数据源的格式和数据,就可以使用MsChart控件实现在线绑定、在线生成图表、在线设置图表风格和在线发布。
通过软件系统的开发和实例运行,验证了通用在线图表的生成。
关键词:MsChart;数据源;动态;在线图表中图分类号:TP751文献标识码:A文章编号:1672-7800(2011)01-0170-03作者简介:孙仁鹏(1972-),男,安徽全椒人,硕士,南京信息职业技术学院计算机与软件学院讲师、教研室主任,研究方向为 Web技术、分布式技术和数据库技术。
1设计思路为了使在线图形报表系统相对通用,必须满足以下条件:①系统能适应数据源的变化来生成在线图表,不用为每个数据源编写相应代码;②系统能适应图表类型变化,同一数据源可以生成不同的图表;③系统能适应相应图表类型的风格变化。
因此,要求系统对数据源的获取必须具有动态性,即系统不捆绑特定的数据源来生成图形报表,任何人可以利用该系统将自己手头的数据生成图形报表;要求系统对图形报表的生成必须具有动态性,即报表的类型和风格可以由用户自己设定。
总之,在线图表系统在不知道数据的来源、类型和结构的情况下,只要用户向该系统提供报表数据,就能生成用户所需的图形报表,并且能实时在线反映,供用户调整,还能在线发布,供用户下次通过输入网址直接浏览。
具体的设计思路如图1所示,其中的MsChart 指的是微软提供的免费图表控件,结合了.NET 3.5框架,用它可以很方便地建立各种图表,同时支持Web和WinForm两种方式。
2动态获取数据源2.1用户在界面上手动输入数据系统提供输入界面,供用户手动输入报表数据。
图表绘制控件mschart的使⽤⽅法1VisualBasic中ActiveX控件MSChart的使⽤⽅法*依⽪提哈尔·穆罕买提,那斯尔江·⼟尔逊(新疆⼤学数学与系统科学学院,乌鲁⽊齐,830046)热依曼·吐尔逊(新疆⼤学信息⼯程学院,乌鲁⽊齐,830046)摘要:本⽂⾸先介绍了VisualBasic(简称VB)中MSChart控件的使⽤⽅法,然后通过简单的例⼦详细介绍了利⽤MSChart控件绘制Excel数据源图表的⽅法。
关键词:VisualBasic;MSChart控件;MicrosoftExcel数据表;图表;数据库The Methods of Using MSChart Control Based on VBIptihar.Muhammat,Nasirjan.Tursun(Mathematics and Systematic Science Institude of XinjiangUniversity,Urumqi,Xinjiang,830046)Reyima.Tursun(Information Science and Engineering Institude of Xinjiang University,Urumqi,Xinjiang,830046)Abstract:This article discusses how to use the MSChart control and how that is used in the VB project to drawing Microsoft? Excel charts.KeyWords: MSChart Control;Chartdata ;Mirosoft Excel Sheets;Chart;Database1. 引⾔Visual Basic中的MSChart控件是⼀个功能强⼤的⾼级图表⼯具,拥有丰富的图表绘制功能,⽤它来可以显⽰⼆维和三维的棒图、区域图、线形图、饼图等多种常⽤图表。
MSChart使用技巧总结上一篇文章写了用dotnetCHARTING 制作柱形图,折线图和圆饼图园友一直在推荐用微软的MSChart..于是,这几天工作之余研究了一下,其中也发现了不少问题.首先固然需要下载MSChart 下载地址而且微软官方有个很不错的实例代码可以帮助学习使用MSChart 下载地址,当然不用我说.大家也知道的.需要NET Framework 以及配合VS2008 sp1来使用了,至于vs2010好像还没有发现MSChart ,希望有知道的朋友给点帮助.安装完MSChart后在vs2021报表一栏里会出现MSChart控件..二话不说拖到页面.自动生成如下代码:代码<asp:Chart ID="Chart1"runat="server"><Series><asp:Series Name="Series1"></asp:Series></Series><ChartAreas><asp:ChartArea Name="ChartArea1"></asp:ChartArea></ChartAreas></asp:Chart>复制代码相信在你们看过微软的实例后对这些属性会有一些了解滴..然后进入正题,本文也主要介绍MSChart的折线图,圆饼图,和柱状图, 因为这三种本人感觉是最常常利用的.对于这三种用MSChart来实现的话本人感觉比较困难的就是数据绑定带来的麻烦,因为在咱们平时利用的时候大体都是动态的数据,而微软实例大体都是写死在页面上的数据, 而且网上这方面资料也比较少,只能自己动手实践啦.先介绍几种MSChart的数据绑定方式,第一种,也是最通俗的一种= ();["ChartArea1"].XValueMember = "home";["ChartArea1"].YValueMembers = "num1";复制代码第二种往后都是通过List的集合形式绑定数据,这里就用变量list来代替了.一些变量都是对应实体类的名称固然也对应数据库字段(list, "home");"home"是x轴坐标第三种,home 分组,Time X轴坐标,num1 y轴坐标(list, "home", "Time", "num1", "Label=num1,ToolTip=num1");第三种,折线图绑定方式[0].(list, "home", "num1", "Label=num1,ToolTip=num1");第四种,折线图绑定方式代码(list, "home", "Time", "num1", "Label=num1,ToolTip=num1");list, "home", list, "num1");我所了解的就这么几种了,有朋友知道有更好的绑定方式不妨贴上代码来.下面介绍下MSChart下的柱形图常常利用的属性这篇博客都有介绍,在这里我就不罗嗦了..代码= true;hartType = ;sValueShownAsLabel = true;= 1;= false;= false;= 40;= 20;foreach (Series ser in{以在挪用这些属性时先用上文介绍的几种绑定方式绑定数据.有些属性可能在3D模式下失效或在2D模式下失效,这是正常现象,效果图:折线图:属性同上..有些属性会在折线图下失效,效果图:圆饼图:代码IList<ChartModel> list = ();abel = "#PERCENT{P}";["Series1"].(list, "home", "num1", "LegendText=home,YValues=num1,ToolTip=num1"); ["Series1"].ChartType =["Series1"].ToolTip = "#LEGENDTEXT: #VAL{C} million";["ChartArea1"]. = true;复制代码这个比较简单吧..主如果这里的["Series1"].(list, "home", "num1","LegendText=home,YValues=num1,ToolTip=num1");LegendText整了我半天.这个是显示右边说明的,开始老是显示不出来,而且还不统一.Legend其实就是右边显示的说明,可是做过的朋友会发此刻柱形图还有折线图若是页面指定了一个<Lengend></Lengend>标签的话,会多显示一个,所以需要在执行绑定的时候写上这么一段代码可不止可以制作这三种图形,我只是感觉这三种比较常常利用.想在圆饼图中归并几项成显示成其他,弄了半天没弄出来,愁闷,谁知道告知下。
ASP NET MVC 中使用MsChart制作图 MVC 中使用MsChart制作图表(附实例)000微软新发布的图表控件MSChart,依赖于.NET Framework3.5 sp1的环境,制作出的图表非常漂亮。
同时,支持webfrom,winform,MVC。
本文主要介绍在ASP .NET MVC 下如何使用MSCHART制作图表。
1.下面简单列举一下MSCHART的部分图表类型2维堆积饼状图2维面积图2维气泡图2维线性图二维柱状图三维饼状图三维面积图三维线性图2. 在 MVC 框架下,如何使用MSCHART.首先看效果柱状图饼状图下面介绍使用MsChart制作图表实现的步骤:首先修改web.config 1. 将控件的命名空间加到("<system.web><pages><controls>" ) : <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Chartin g"assembly="System.Web.DataVisualization,Version=3.5 .0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 2. 添加一个httpHandler ("<httpHandlers>"下面) :<add path="ChartImg.axd" verb="GET,HEAD"type="System.Web.UI.DataVisualization.Charting.Cha rtHttpHandler,System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>3. 然后根据自己的需要,绘制不同的图表。
微软图表控件MsChart使用指南昨天在网上看到了微软发布了.NET 3.5框架下的图表控件,第一时间抓下来看了一下,发觉功能很强劲,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显,只能在最新的开发环境中使用,需要.Net 3.5 Sp1以及VS 2008的开发环境。
下面是下载地址:mework 3.5)–1.包含英文版,中文版。
上面提供的链接是中文版的,可以更改为英文版。
2.语言包:Microsoft Chart Controls for Microsoft .NETFramework 3.5 Language Pack3.Microsoft .NET Framework 3.5 的Microsoft 图表控件的语言包,包含23中语言。
4.Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008–这个只有英文的,没找到中文的。
5.文档(Microsoft Chart Controls for .NET Framework Documentation)–这个只有英文的,没找到中文的。
6.WinForm 和的例子(Samples Environmentfor Microsoft Chart Controls)–这个只有英文的,没找到英文的。
7.Demo 下载:/mschart下了它的示例程序后,运行了一下,非常的强大,可以支持各种各样的图形显示,常见的:点状图、饼图、柱状图、曲线图、面积图、排列图等等,同时也支持3D样式的图表显示,不过我觉得最有用的功能还是支持图形上各个点的属性操作,它可以定义图形上各个点、标签、图形的提示信息(Tooltip)以及超级链接、Jav ascript动作等,而不是像其它图形类库仅生成一幅图片而已,通过这些,加上微软自己的Ajax框架,可以建立一个可以互动的图形统计报表了。
一、mschart控件使用详解 3.5 ChartAreas控件中的ChartAreas属性是ChartArea对象的集合,ChartArea负责显示容器的属性或图表的背景,由于不止一个,这就意味着MSChart控件可以包含多个图表。
在使用多个ChartAreas时理解下面几点内容非常重要:在技术上可以控制ChartArea的位置,因此多个ChartArea可以叠加,但不推荐这么做,建议在MSChart 控件内的独立区域内绘制它们,为了合并或覆盖数据点,推荐在一个ChartArea内使用多个序列,后面将会有介绍。
默认情况下,控件会为你自动调整大小和位置。
单个ChartArea将会独立调整以适应数据,正如上图所显示的,第二个ChartArea中的Y值更大,数据点也更少。
多个ChartAreas控件允许你使用多个不相容的ChartTypes(序列对象属性,控制图表的显示类型,如条形、柱状和饼状)显示图表,图表任然显示在相同的MSChart控件内。
对于单个ChartArea,有许多独立的属性可以设置和调整,这样你就可以自行调整图表区域以满足不同的需要,它的大部分属性和面板控件的属性都差不多,因此这里我们就不多说了,只说一下ChartArea 唯一的属性,下面是这些唯一属性的清单:3D样式:使用ChartArea的Area3DStyle属性和子属性,我们可以创建漂亮的、十分抢眼的3D图表,无论是在设计器中还是在代码中都必需将Enable3D属性设置为TRUE,其余的参数可以通过调整旋转、视角、照明方式和其它3D元素,让一个图像看起来具有3D效果。
坐标轴控制和样式:坐标轴集合包括x轴和y轴,以及第二个x轴和y轴,这四个项目的属性允许你设置样式、设置标签、定义间隔、设置工具提示、设置缩放等,如果你的图标要求精确的间隔、标签或其它特殊的显示需要,你可以使用这些属性。
例如,你可以颠倒坐标轴的值,或控制如何在x轴上显示标签。
利用MsChart控件动态生成通用在线图表
摘要:为了将已有的数据在线生成所需的图表,提出了利用微软的MsChart控件设计通用在线图表的方法。
首先对为什么及如何灵活获取数据源进行了分析,并提出了在线录入和动态调用Web 服务两种方法。
有了数据源的格式和数据,就可以使用MsChart 控件实现在线绑定、在线生成图表、在线设置图表风格和在线发布。
通过软件系统的开发和实例运行,验证了通用在线图表的生成。
关键词:MsChart;数据源;动态;在线图表
为了使在线图形报表系统相对通用,必须满足以下条件:①系统能适应数据源的变化来生成在线图表,不用为每个数据源编写相应代码;②系统能适应图表类型变化,同一数据源可以生成不同的图表;③系统能适应相应图表类型的风格变化。
因此,要求系统对数据源的获取必须具有动态性,即系统不捆绑特定的数据源来生成图形报表,任何人可以利用该系统将自己手头的数据生成图形报表;要求系统对图形报表的生成必须具有动态性,即报表的类型和风格可以由用户自己设定。
总之,在线图表系统在不知道数据的来源、类型和结构的情况下,只要用户向该系统提供报表数据,就能生成用户所需的图形报表,并且能实时在线反映,供用户调整,还能在线发布,供用户下次通过输入网址直接浏览。
具体的设计思路如图1所示,其中的MsChart 指的是
微软提供的免费图表控件,结合了.NET 3.5框架,用它可以很方便地建立各种图表,同时支持Web和WinForm两种方式。
2动态获取数据源
2.1用户在界面上手动输入数据
系统提供输入界面,供用户手动输入报表数据。
输入的数据须有一定的结构和类型,并且方便浏览和修改,才能更好地为用户生成所需的图表服务,设计流程如图2所示,相应的运行界面如图3和图4所示。
实现要点:①回发的数据如何保存和方便使用,先要生成图表数据结构内存数据集m_dtStructure,其次生成图表数据内存数据集m_dtData,两个数据集还要方便浏览和维护,最终还要根据m_dtData生成在线图表,不断变化、回发和再次使用的数据可以存放在Session对象中,如果所有的界面在一个页面,也可以放在视图状态ViewState对象中;②如何产生上面两个内存表的结构,m_dtStructure的结构是固定的,包括字段名和字段类型,m_dtData的结构由m_dtStructure中的内容决定;③数据输入界面是根据m_dtStructure动态生成的,并且还要进行输入数据的类型验证;④使用数据展示控件完成m_dtStructure和m_dtData的浏览和维护,每当数据集发生变化的时候,都要用新的数据集进行重新绑定。
图1通用在线图表设计思路
图2数据录入设计流程图3创建数据表结构
图4根据表结构输入图表数据
2.2动态调用Web服务获得所需的数据集
数据由第三方通过Web服务提供,通过给定的WSDL 服务地址,动态生成Web Service服务类进行服务调用,设计流程如图5所示,运行界面如图6所示。
实现要点:①提取界面的web服务地址,根据WSDL内容,动态生成Web Service客户端代码;②使用动态编译技术将生成的Web Service客户端代码编译为DLL;③通过反射机制获取所有的公共方法供用户选择,获取方法的参数供用户输入,然后实现动态调用。
图5动态调用Web服务设计流程
图6动态调用Web服务
3图形报表的生成
获取了规范化的数据,就可以利用MsChatrt控件方便生成用户需要的图表了。
不同的数据格式,可以使用不同的绑定方式。
在选择了具体的绑定方式和图表类型后,就可以将相应的字段进行对应的绑定,产生图表。
有了具体的图形,就可以获取该图形的主要风格参数,包括标题、颜色、3D效果等。
设置好风格后,可以将图表保存在Web服务器端,实现在线发布。
设计流程如图7所示,相应的运行界面如图8和图9所示。
图7在线生成图表设计流程
图8图表生成设置界面
图9在线风格设置和在线发布
4结束语
该系统已经得到了良好的应用,通用性和动态性体现如下:系统与数据源相分离,系统提供了获取不同数据源的方式。
一个数据集,可在线生成不同类型的图表,不同风格的图表,由用户需要决定。
可在线发布用户自己满意的图表。
用户在使用本系统时,需要对数据的格式、绑定方式、图表类型及参数有所了解。
参考文献:
[1]张成才,王永信.利用M SCha r t控件动态生成统计图[J].郑州大学学报,2007(3).
[2]曾石连.巧用MsChart实现在线作图[J].华南金融电脑,2005(2).
[3]MSDN.Samples Environment for Microsoft Chart Controls [CB/OL] (2008-10-24). /mschart/Release/ProjectReleases.as px?ReleaseId=1591.
[4]Matthew MacDonald,Mario 3.5高级程序设计[M].北京:人民邮电出版社,2008.
[5]孙仁鹏.基于系统表的通用动态查询系统设计与实现[J].计算机工程与设计,2007(23).。