DevChart 甘特图 干货!

使用Dev Chart内的Gantt样式进行甘特图的处理。

Schedule控件比较困难,个人水平有限。

 

甘特图与一般图表的XY轴不同,在甘特图中,X轴为竖向轴,Y轴为横向轴。

X轴可显示类别或者类型。Y轴一般为时间。

按我的方式,X轴通过数据库自定义,Y轴通过设置最大最小范围,进行自定义。

X轴:

typeList = DeviceAlarmItrop.GetAlarmTypeList();
                if (typeList == null || typeList.Count <= 0)
                {
                   
                    return;
                }

                listLabel = new CustomAxisLabel[typeList.Count];

                for (int i = 0; i < typeList.Count; i++)
                {
                    CustomAxisLabel label = new CustomAxisLabel();
                    label.AxisValue = typeList[i].AlarmCode;
                    label.Name = typeList[i].AlarmTypeDesc;
                    listLabel[i] = label;
                }

准备了一个List,来对应X轴。

GanttDiagram diagram = (GanttDiagram)chartControl1.Diagram;

                diagram.AxisX.Title.Visible = true;
                diagram.AxisX.Title.Alignment = StringAlignment.Center;
                diagram.AxisX.Title.Text = "报警类型";
                diagram.AxisX.Title.Antialiasing = true;
                diagram.AxisX.CustomLabels.AddRange(listLabel); 加入X轴的数据。AddRange

务必使用GanttDiagram

Y轴

diagram.AxisY.Title.Visible = true;
                diagram.AxisY.Title.Alignment = StringAlignment.Center;
                diagram.AxisY.Title.Text = "小时";
                diagram.AxisY.Title.Antialiasing = true;
                diagram.AxisY.WholeRange.MaxValue = Convert.ToDateTime(dateDay.DateTime.Date.AddDays(1).AddSeconds(1).ToString("yyyy-MM-dd HH:MM:ss"));最大值
                diagram.AxisY.WholeRange.MinValue = dateDay.DateTime.Date;最小值

我需要是显示一天的内容。

添加图内容

foreach (DeviceAlarmLine item in alarmList)
                {

                    Series newSeries = new Series("Gantt", ViewType.Gantt);

                    //newSeries.ArgumentScaleType = ScaleType.DateTime;
                    newSeries.ValueScaleType = ScaleType.DateTime;
                    //newSeries.ValueScaleType = ScaleType.Numerical;
                    newSeries.LegendText = item.EventType + "";
                    newSeries.Label.PointOptions.ArgumentDateTimeOptions.FormatString = "HH:MM:SS";格式
                    newSeries.CrosshairLabelPattern = item.FromStart2EndString;鼠标悬停时,提示的文本
                    newSeries.CrosshairLabelVisibility = DevExpress.Utils.DefaultBoolean.True;

                    GanttSeriesView gsv1 = (GanttSeriesView)newSeries.View;
                    gsv1.FillStyle.FillMode = FillMode.Solid;
                    //newSeries.ToolTipPointPattern = "HH:mm";
                 
                    if (item.EventType == 0)
                    {
                        newSeries.View.Color = Color.Green;
                      
                    }
                    else
                    {
                        newSeries.View.Color = Color.Red;
                    }

                    newSeries.Points.Add(new SeriesPoint(item.EventType, new DateTime[] { item.operateTime, item.EndTime.HasValue ? item.EndTime.Value : dateDay.DateTime.AddDays(1).AddSeconds(-1) }));

这个地方我们以系列的形式进行添加,系列的点(对应X轴的编号,起始时间,结束时间)

多个系列,以循环的形式进行处理。
                
                    chartControl1.Series.Add(newSeries);
                }

 ((GanttDiagram)chartControl1.Diagram).EnableAxisXZooming = true;
                ((GanttDiagram)chartControl1.Diagram).EnableAxisYZooming = true;
                chartControl1.Titles.Add(new ChartTitle());
                chartControl1.Titles[0].Text = "单日报警时段分布";标题
                chartControl1.Titles[0].Font = new Font("Tahoma", 14, FontStyle.Bold);
                chartControl1.Dock = DockStyle.Fill;

有关画面的任何Enable数据尽量以代码处理,因为是采用添加系列的形式实现的。所以每次呈现新的图表前,对现有内容进行清空。

                this.chartControl1.Series.Clear();
                this.chartControl1.Titles.Clear();
                this.chartControl1.Controls.Clear();

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值