最近在用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的更多相关文章

  1. DevExpress.XtraLayout.LayoutControl 动态添加控件

    // Create an item within a specified group,// bound to a specified data field with the specified edi ...

  2. 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解

    一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...

  3. DataGridview动态添加列

    1.获取数据源(select * from table名称) 2.动态绑定数据源 private void GetTableInfo(DataTable dt) { listBh = new List ...

  4. js动态添加事件-事件委托

    作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  5. 后台动态添加的button,如何触发button_click事件?

    后台动态添加的button,需要在Page_Load或者Page_Init重新动态生成才能执行button_click public Panel GetContrlType() { Panel pan ...

  6. jquery动态添加的html,第三方插件无法生效的情况

    今天一个问题纠结了半天,问题如下图  问题大致就是如上,新增的内容死活点不起,插件没有生效,在一个装逼前端群里面问,给我的答案是叫我去了解事件委托,了解一下事件冒泡!! 好吧,我一上午加半个下午的时间 ...

  7. 【Java EE 学习 75 下】【数据采集系统第七天】【二进制运算实现权限管理】【使用反射初始化权限表】【权限捕获拦截器动态添加权限】

    一.使用反射动态添加权限 在该系统中,我使用struts2的时候非常规范,访问的Action的形式都是"ActionClassName_MethodName.action?参数列表" ...

  8. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

  9. Net作业调度(五)—quartz.net动态添加job设计

    介绍 在实际项目使用中quartz.net中,都希望有一个管理界面可以动态添加job,而避免每次都要上线发布. 也看到有园子的同学问过.这里就介绍下实现动态添加job的几种方式, 也是二次开发的核心模 ...

随机推荐

  1. Unix/Linux环境C编程入门教程(28) 日期时间那些事儿

    记得这个专题第一篇我们写过一个程序运行时间的程序,采用库函数提供的clock()模拟做程序测试.本篇介绍的函数也是和时间相关,但是没有clock的细致,而是提供的系统时间和日期. 1.asctime( ...

  2. MFC子窗口和父窗口(SetParent,SetOwner)

    一.概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口.这个数据结构中有四个数据用来构建list, ...

  3. 【hihocoder 1257 Snake Carpet】构造

    2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...

  4. Mininet 搭建自定义网络

    Mininet支持参数化拓扑,用几行python代码,你就可以创建一个基于你传进去的参数配置的灵活拓扑结构,还可被多个实验重复使用. 下面是一个小例子:(基于mininet/topo.py:Singl ...

  5. C编译器、链接器、加载器详解

    摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...

  6. Android自己主动化測试之Monkeyrunner用法及实例

    眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...

  7. linux 内核源代码分析 - 获取数组的大小

    #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 測试程序: #include<stdio.h> #include<stdlib. ...

  8. win7下安装Ubuntukylin-14.04双系统

    工具准备: 下载ISO系统镜像,UltraISO,EasyBCD,分区助手,8G 优盘 U盘启动制作流程: 1,打开分区助手,从硬盘中分出空闲空间(60G)作为Ubuntu工作空间,文件系统设为Ext ...

  9. JavaScript 【跨浏览器XPath,做个兼容】

    IE的Xpath 获取单一节点 var xmlDom = getXMLDOM(xmlStr);//调用之前写好的方法获得XMLDOM对象 // var node = xmlDom.selectSing ...

  10. Windows中的句柄

    (一)句柄 在程序设计中,句柄(handle)是一种特殊的智能指针.当一个应用程序要引用其他系统(如数据库.操作系统)所管理的内存块或对象时,就要使用句柄. 句柄与普通指针的区别在于,指针包含的是引用 ...