APP下载

DevExpress图表控件XtraCharts在监控软件中的应用

2011-08-08张国梁

电脑与电信 2011年6期
关键词:坐标轴图例控件

张国梁

(西藏民族学院网络信息技术中心,陕西 咸阳 712082)

1.概述

DevExpress是一流的控件套包产品。它功能强大,是.NET基础控件扩展包,可以快速开发出专业、强大的应用程序。其中的XtraCharts组件可以方便、快捷的开发出有关二维和三维图表软件。该组件可使用在窗口应用、ASP.NET和打印页面上。XtraCharts可以可视化各种数据,包括数据库表和集合数据。XtraCharts的二维图表包括柱状图、点图、线图、饼图等,同时还支持三维图。

一般的监控软件,都需要采集监控对象的各项数据,并动态显示各项数据变化。如果直接从底层做会比较复杂,而且要达到专业性的显示效果更难。但是,如果使用XtraCharts来实现,可以极大提高开发效率和效果。开发人员不必耗费太多时间在图表显示上,而将重点放在数据的处理上。

2.XtraCharts应用方法和实例分析

ChartControl控件是将XtraCharts用在WinForm上。本文主要论述ChartControl控件应用。XtraCharts在ASP.NET和打印页面上应用方法和此类似。DevExrpress为用户提供两种方式使用该控件:一是可以将ChartControl直接拖放在窗口上,通过Chart Wizard来定制具体的应用;二是在程序运行时,直接通过代码来生成定制具体的应用。第一种方式简单方便,适合简单应用。第二种方法比较复杂,但灵活,适合复杂应用。本文主要介绍第二种方式。

ChartControl将要显示的数据和对应图形分离。该控件将每一组相关的数据封装在一个series对象中。其中一个series对象代表了一系列相关的数据点,作为在图表上显示的一个分组。同一个series对象可以不同的视觉方式表示。比如同一组数据可以分别使用柱状图、点图、线图、饼图等表示。Chart-Control中的Diagram对象用来表示图表的显示布景,包括Axis坐标轴,Gridline网格线,图例Legend等。

下面根据实例来分析ChartControl应用方法。例如,如果需要开发有关监控病人体征的软件,在微机上实现病人体征动态显示和监控,则需要在图表上同时显示多项数据动态变化图。假设要监控病人的体征:包括体温、呼吸和脉搏值三项数据。这三项数据都可以看作为是以某一时间点为自变量的函数的值。时间点之间有固定时间间隔。因此,可以设计让三项数据共用一个时间轴,用X轴表示,同时这三项数据又分别对应一个Y轴。三项数据分别对应三个series对象。

3.实现方法和步骤

3.1 设置Diagram对象

自定义一个类来实现。用来设定图表显示元素,包括坐标轴和图例等。坐标轴分为主坐标轴和副坐标轴。需要将不同类型数据显示在同一张图表上,而每一项数据的数值有不同范围。因此就需要多个坐标轴表示这每一项数据,每一种数据封装在一个series对象中。因此每一个坐标轴和一个series对象绑定。在本文应用中,将采集数据的时间作为X轴,在Y轴方向分别为每一个时间点上对应的体温、呼吸和脉搏值。因此需要设定一个X轴和三个Y轴。其中一个为主Y轴呼吸数据绑定,两个副Y轴分别同体温数据和脉搏数据绑定。使用下面的代码来实现一个表示体温的副Y轴。

上面提到过Diagram对象用来设置图表上的显示元素。因此,首先定义Diagram对象。再将副轴加入到Diagram对象上。

private XYDiagram xyDiagram1;

xyDiagram1.SecondaryAxesY.AddRange(new SecondaryA-xisY[]

{secondaryAxisY1,secondaryAxisY2});

SecondaryAxisY secondaryAxisY1=new SecondaryAxisY();//定义一个副Y轴。

secondaryAxisY1.Alignment=AxisAlignment.Near;//设定显示位置。

secondaryAxisY1.GridSpacingAuto=false;//网格线间隔手动设置。

secondaryAxisY1.GridSpacing=2;//设置网格线的间隔。

secondaryAxisY1.Range.MaxValueSerializable="42";//显示体温的最大值。

secondaryAxisY1.Range.MinValueSerializable="20";//显示体温的最小值。

secondaryAxisY1.Range.Auto=false;

secondaryAxisY1.Range.SideMarginsEnabled=true;

secondaryAxisY1.NumericOptions.Format= DevExpress.XtraCharts.NumericFormat.Number;

secondaryAxisY1.NumericOptions.Precision=1;

secondaryAxisY1.Name="secondaryAxisY1";

最后再用XYDiagram对象xyDiagram1设定ChartControl对象中,Diagram属性。

lineChart.Diagram=xyDiagram1;

3.2 定义Series对象

每一个Series对象绑定一项数据和一个Y轴。下面代码,定义Series对象ser1,显示类型为Spline,表示样条曲线。并且和上面定义的secondaryAxisY1绑定。

Series ser1=new Series(“体温”,ViewType.Spline);

ser1.ArgumentScaleType=ScaleType.DateTime;//自变量类型为日期时间型。

((LineSeriesView)ser1.View).LineMarkerOptions.Kind =MarkerKind.Triangle;//设置ser1对应的图例。

((LineSeriesView)ser1.View).LineStyle.DashStyle=Dash-Style.Solid;

((LineSeriesView)ser1.View).Color=Color.Red;

((LineSeriesView)ser1.View).LineMarkerOptions.Size=10;

((LineSeriesView)ser1.View).LineStyle.Thickness=1;

ser1.PointOptions.ArgumentDateTimeOptions.Format=Date-TimeFormat.ShortTime;

ser1.SeriesPointsSorting=SortingMode.Ascending;

下面定义样条曲线视图SplineSeriesView对象spline-SeriesView1。设定其对应的坐标轴为secondaryAxisY1。再用splineSeriesView1设置ser1的View属性。

SplineSeriesView splineSeriesView1=new SplineSeriesView();

splineSeriesView1.AxisYName="secondaryAxisY1";

ser1.View=splineSeriesView1;

最后将ser1加到图表上。代码为:

lineChart.Series.Add(ser1);//lineChart为ChartControl对象。

3.3 向Series对象上添加数据

当数据可以动态更新时,相应的曲线也会变化,从而实现动态曲线。定义定时器,在定时器事件中加数据点。代码如下,pointTime为时间点,dd为对应的值。

private void timer1_Tick(object sender,EventArgs e)

{

ser1.Points.Add(new SeriesPoint(pointTime,new double[]{dd}));

pointTime=pointTime.AddMinutes(5);

}

3.4 实现图表自动滚屏

当数据不断增加,在图表上显示完一屏时,就需要自动滚屏。具体的做法是,定时修改X轴的表示范围。当代码如下:

xyDiagram1.AxisX.Range.Auto=false;

xyDiagram1.AxisX.Range.MaxValue=start;//设置X轴的起点

xyDiagram1.AxisX.Range.MinValue=end;//设置X轴的终点。

当X轴的表示范围变化时,显示的曲线随之移动,从而实现图表的滚屏。

4.应用效果分析

通过以上的方法和步骤,就可以使用DevExpress来实现较为复杂的图表功能,在一个图表显示多种不同的数据,将这些不同数据和指定坐标轴绑定,并实现图表的动态更新和自动滚屏。实现效果如图1病人体征监测图所示。图1中显示了三项数据的变化趋势,并包含一个X轴和三个Y轴,图中上部为X轴表示时间,右侧从左到右依次分别为副Y轴2、副Y轴1和主Y轴。体温对应红色线和副Y轴1,图例为三角形。呼吸对应紫色线和副Y轴2,图例为正方形。呼吸对应褐色线和主Y轴,图例为圆形。

图1 病人体征监测图

本文中使用的开发环境:VS2008 C#,DevExpress控件包V8.2。示例软件运行环境:.netframework2.0,windows xp/windows2003/windows7。

5.结语

在本文中,通过监控软件的应用实例,介绍了DevExpress图表控件的使用方法和步骤。从中可以看出,使用DevExpress中XtraChart组件来开发图表相关软件,既可以实现比较复杂的功能,又可以达到比较好的显示效果。同时开发人员不必耗费太多精力在图表显示上,而将重点放在数据的处理上,从而可以提高开发效率和效果。

[1]DevExpress Documentation.

[2]http://documentation.devexpress.com/#XPO/CustomDocument-1998.

[3]Christian Nagel.C#高级编程[M].清华大学书版社.2006.

[4]李福红.DevExpres表格控件运行时动态设置表格列[J].中国高新技术企业,2010,33:117.

猜你喜欢

坐标轴图例控件
用坐标轴平移妙解斜率和(或积)为定值问题
找拼图
关于.net控件数组的探讨
犬狗的画法(六)
如何让学生巧用图例解决数学问题
可爱的小鸟
巧用仿射变换妙解高考解析几何题
ASP.NET服务器端验证控件的使用
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
数学问答