初识Devexpress ChartControl 之 动态添加stepline及TextAnnotation
最近在用devexpress 第三方软件做项目。
devexpress 的控件使用简单、功能强大、类型丰富、界面优美、扩展性强。今天主要是动态生成了一条StepLine。生成后的效果(能力不强,所以做的比较简单。):
首先,建立一个form(普通的或ribbonform均可),然后拖拽一个chartControl到form中。右键run warzid。然后将预设的线条删除(因为我们要动态添加)。
然后查看form代码。在构造函数中添加方法调用InitCharControl();
然后新建InitCharControl方法,此方法主要功能是生成stepline.
代码如下:

- //init ChartControl1
- //create dataTable
- DataTable dt1 = new DataTable();
- dt1.Columns.Add("count", typeof(long));
- dt1.Columns.Add("step", typeof(string));
- dt1.Columns.Add("pass", typeof(string));
- for (int i = 1; i <= 4; i++)
- {
- DataRow dr = dt1.NewRow();
- dr["count"] = i * 10;
- dr["step"] = "step" + i;
- dr["pass"] = "通过率:" + i * 10 + "%";
- dt1.Rows.Add(dr);
- }
- //create new series
- Series series2 = new Series();
- StepLineSeriesView stepLine = new StepLineSeriesView();
- stepLine.LineMarkerOptions.Kind = MarkerKind.Square;
- stepLine.LineMarkerOptions.Size = 50;
- series2.View = stepLine;
- chartControl1.Series.Add(series2);
//datasource bind- chartControl1.Series[0].ArgumentDataMember = "step";
- chartControl1.Series[0].ValueDataMembers.AddRange(new string[] { "count" });
- chartControl1.DataSource = dt1;
- int count=0;
- foreach(SeriesPoint point in series2.Points )
- {
- SeriesPointAnchorPoint anchorPoint = new SeriesPointAnchorPoint();
- anchorPoint.SeriesPoint = point;
- TextAnnotation txtAnnotation = new TextAnnotation();
- txtAnnotation.RuntimeRotation = true;
- txtAnnotation.RuntimeResizing = true;
- txtAnnotation.RuntimeMoving = true;
- txtAnnotation.RuntimeAnchoring = true;
- txtAnnotation.Text = dt1.Rows[count++]["pass"].ToString();
- txtAnnotation.ShapePosition = new RelativePosition(319.97, -48);
- txtAnnotation.AnchorPoint = anchorPoint;
- chartControl1.AnnotationRepository.Add(txtAnnotation);
- }

2.添加多条stepline
对于chartControl 只有以条数据显然是没有用的。因此可能会生成多条线,供对比用。
下面我们就来看看如何生成多条setpline(本例以两条为例)
其实从上例中可以看到如何把数据源绑定到一条setpline上,当绑定两条时原理是相同的但是在绑定时就需要将数据源绑定到指定名称或索引值的setpline上。
只需要将绑定语句改写为:
- chartControl1.Series[lineName].DataSource = dt1;
以下是完整代码:

- private void InitCharControl(string lineName)
- {
- //init ChartControl1
- #region 手动添加节点、批注
- #endregion
- // get datatable
- DataTable dt1 = InitDataTable();
- //create new series
- Series series2 = new Series(lineName,ViewType.StepLine);
- StepLineSeriesView stepLine = new StepLineSeriesView();
- stepLine.LineMarkerOptions.Kind = MarkerKind.Square;
- stepLine.LineMarkerOptions.Size = 50;
- series2.View = stepLine;
- chartControl1.Series.Add(series2);
- chartControl1.Series[lineName].ArgumentDataMember = "step";
- chartControl1.Series[lineName].ValueDataMembers.AddRange(new string[] { "count" });
- chartControl1.Series[lineName].DataSource = dt1;
- int count = 0;
- foreach (SeriesPoint point in chartControl1.Series[lineName].Points)
- {
- SeriesPointAnchorPoint anchorPoint = new SeriesPointAnchorPoint();
- anchorPoint.SeriesPoint = point;
- TextAnnotation txtAnnotation = new TextAnnotation();
- txtAnnotation.RuntimeRotation = true;
- txtAnnotation.RuntimeResizing = true;
- txtAnnotation.RuntimeMoving = true;
- txtAnnotation.RuntimeAnchoring = true;
- txtAnnotation.Text = dt1.Rows[count++]["pass"].ToString();
- txtAnnotation.ShapePosition = new RelativePosition(319.97, -48);
- txtAnnotation.AnchorPoint = anchorPoint;
- chartControl1.AnnotationRepository.Add(txtAnnotation);
- }
- }

这样只需递归调用该方法并传递不同名字,就会生成不同的stepline啦,生成的线系统会自动用不同颜色进行区别,当然你也可以自己改造该函数在构造线时指定颜色,如果有隐藏数据需要绑定到节点上可以利用节点的tag属性进行绑定。
初识Devexpress ChartControl 之 动态添加stepline及TextAnnotation的更多相关文章
- DevExpress.XtraLayout.LayoutControl 动态添加控件
// Create an item within a specified group,// bound to a specified data field with the specified edi ...
- 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解
一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...
- DataGridview动态添加列
1.获取数据源(select * from table名称) 2.动态绑定数据源 private void GetTableInfo(DataTable dt) { listBh = new List ...
- js动态添加事件-事件委托
作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- 后台动态添加的button,如何触发button_click事件?
后台动态添加的button,需要在Page_Load或者Page_Init重新动态生成才能执行button_click public Panel GetContrlType() { Panel pan ...
- jquery动态添加的html,第三方插件无法生效的情况
今天一个问题纠结了半天,问题如下图 问题大致就是如上,新增的内容死活点不起,插件没有生效,在一个装逼前端群里面问,给我的答案是叫我去了解事件委托,了解一下事件冒泡!! 好吧,我一上午加半个下午的时间 ...
- 【Java EE 学习 75 下】【数据采集系统第七天】【二进制运算实现权限管理】【使用反射初始化权限表】【权限捕获拦截器动态添加权限】
一.使用反射动态添加权限 在该系统中,我使用struts2的时候非常规范,访问的Action的形式都是"ActionClassName_MethodName.action?参数列表" ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...
- Net作业调度(五)—quartz.net动态添加job设计
介绍 在实际项目使用中quartz.net中,都希望有一个管理界面可以动态添加job,而避免每次都要上线发布. 也看到有园子的同学问过.这里就介绍下实现动态添加job的几种方式, 也是二次开发的核心模 ...
随机推荐
- js混淆 反混淆 在线
js反混淆地址:http://www.bm8.com.cn/jsConfusion/ 在线javascript 混淆http://www.moralsoft.com/jso-online/hdojso ...
- linux系统关机与重新启动命令
在linux下关机和重新启动系统有shutdown.halt.reboot.init,对于他们来说他们的内部工作过程是不同样的. 1.shutdown命令 使用它能够安全地关闭系统.然而在关闭系统时. ...
- [week1]每周总结与工作计划
实在不想说这句俗话,因为实在太俗了.但是俗话说,“吾日三省吾身”,我虽然难以做到每天反省那么多次,但是每周来一次就很不错了.于是我决定: 从这周开始准备每周都写每周总结与工作计划. 很好,就这样说定了 ...
- Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...
- JavaScript事件处理程序 学习笔记
我一直认为Javascript的特点就是在和用户交互的过程中可以进行一些操作,那么事件作为用户交互的主要部分就显得特别重要,今天先学习了JS事件处理程序的相关内容. 首先,要明白Javascript ...
- ViewState存储到服务器
把viewstate保存在服务器上 将ViewState持久化保持在服务器端的代码,这样ViewState不占用网络带宽,因此其存取只是服务器的磁盘读取时间.并且它很小,可以说是磁盘随便转一圈就能同时 ...
- JQuery EasyUi 扩展combox验证
随笔记录一下 1.通过select text的值验证 /** * 扩展combox验证,easyui原始只验证select text的值,不支持value验证() */ (function($){ c ...
- NSDate 的一些操作(比较、创建、在现有date加减一定时间等)
创建当前时间 NSDate *date = [NSDate date]; 从现在开始的24小时 NSTimeInterval a_day = 24*60*60; NSDate *tomorrow = ...
- Hibernate学习之注解学习
转自:http://blog.sina.com.cn/s/blog_935ebb670101dnre.html 1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @En ...
- php之文件基础操作
在php中对文件的基础操作非常的简单,php提供的函数粗略的用了一遍. file_get_contents():可以获取文件的内容获取一个网络资源的内容,这是php给我封装的一个比较快捷的读取文件的内 ...