如何在同一行上放置多个甘特图栏?

时间:2016-02-05 15:54:16

标签: c# winforms charts series gantt-chart

我目前有一个甘特图,显示工作请求的日期。我被要求修改甘特图,只显示工作日期。例如,WR#1从2016年2月8日开始,到2016年2月25日结束。但是,工作只在Mon-Thur进行。我目前的甘特图显示2016年2月8日至2016年2月25日的酒吧。我想打破吧台,只显示2 / 8-2 / 11,2 / 15-2 / 18和2 / 22-2 / 25。我还想在一行上显示这个单一的工作请求。是否可以使用SeriesChartType.RangeBar,或者我必须使用不同的图表类型?我尝试使用具有相同DataPoint的多个xValue对象创建一个系列,但是当我将该系列添加到图表时,每个DataPoint都显示在一个单独的行上。我做错了吗?

以下是我用于图表设置的一些代码:

using System.Windows.Forms.DataVisualization.Charting;
...
Series series1 = new Series();
series1.ChartArea = "Default";
series1.ChartType = SeriesChartType.RangeBar;
series1.YValuesPerPoint = 2;
series1.YValueType = ChartValueType.Date;

首次尝试:

// WR #1
DataPoint dp0 = new DataPoint(0, new double[] { startDate0, stopDate0 });
DataPoint dp1 = new DataPoint(0, new double[] { startDate1, stopDate1 });
DataPoint dp2 = new DataPoint(0, new double[] { startDate2, stopDate2 });

// WR #2
DataPoint dp3 = new DataPoint(1, new double[] { startDate3, stopDate3 });
DataPoint dp4 = new DataPoint(1, new double[] { startDate4, stopDate4 });
DataPoint dp5 = new DataPoint(1, new double[] { startDate5, stopDate5 });

series1.Points.Add(dp0);
series1.Points.Add(dp1);
series1.Points.Add(dp2);
series1.Points.Add(dp3);
series1.Points.Add(dp4);
series1.Points.Add(dp5);

chart1.Series.Clear();
chart1.Series.Add(series1);

我有几百个工作请求,所以我自然会使用循环为每个工作请求创建每个DataPoint并将其添加到系列中。

1 个答案:

答案 0 :(得分:1)

试试这个:

    private void Form1_Load(object sender, EventArgs e)
    {
        chart1.Series[0].Points.AddXY(1, new object[] { new DateTime(2016, 2, 8), new DateTime(2016, 2, 25) });
        chart1.Series[0].Points.AddXY(2, new object[] { new DateTime(2016, 2, 8), new DateTime(2016, 2, 11) });
        chart1.Series[0].Points.AddXY(2, new object[] { new DateTime(2016, 2, 15), new DateTime(2016, 2, 18) });
        chart1.Series[0].Points.AddXY(2, new object[] { new DateTime(2016, 2, 22), new DateTime(2016, 2, 25) });
    }

enter image description here