2015-11-26 28 views
1

我想创建一个时间表,并试图使用图表控件。但它不工作,因为我只需要X值和图表系列就像,只有AddY或AddXY,没有AddX/AddXX2。如何创建一个时间轴控件的事情?

我知道有像以前这样的问题和东西。有这个人问

如何创建时间轴控制?

像,3年前,但我不知道他们在说的答案和注释正是..

我当前的代码是:

DirectoryInfo dInfo = new DirectoryInfo(tbSelectFolder.Text); 
     FileInfo[] Files = dInfo.GetFiles("*.ts"); 
     List<string> fileNames = new List<string>(); 

     List<DateTime> fileDates = new List<DateTime>(); 


     chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.White; 
     chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.White; 
     chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Solid; 
     chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; 
     chart1.ChartAreas[0].AxisX.LabelStyle.ForeColor = Color.White; 
     chart1.ChartAreas[0].AxisY.LabelStyle.ForeColor = Color.White; 
     chart1.ChartAreas[0].AxisX2.Enabled = AxisEnabled.True; 

     foreach (FileInfo file in Files) 
     { 
      string filename = Path.GetFileNameWithoutExtension(file.Name); 
      string[] fileNameSplit = filename.Split(' '); 
      fileNames.Add(fileNameSplit[0]); 

      DateTime date = DateTime.ParseExact(fileNameSplit[1], "yyMMdd",null); 
      fileDates.Add(date); 
     } 


     foreach (var value in fileNames) 
     { 
      foreach (var value1 in fileDates) 
      { 
       chart1.Series["US"].Points.AddXY(value1, value); 
      } 
     } 

这基本上给了我这个

Lame Looking Chart

我试图创建的时间表基本上是像一个时间t能够。那么,有没有一种方法,使它看起来像这样

What i Want

+0

您的图表_东西看起来像一个柱形图。你使用哪种图表类型? – jsanalytics

+0

我正在使用线条或条形图。我正在考虑叠加条形图,但idk如何做,因为我似乎无法自动添加系列。可以通过Series series = new Series()来添加它。我认为? – Marceee

+0

你可能想要改进一下你想要的东西的形象,使其更清晰。对我来说,它根本不像时间线。显示的部分是否必须有不同的尺寸?这些数字是什么?日期?? – TaW

回答

0

下面是一个可能的解决方案:

enter image description here

// set up from clean slate: 
    chart1.ChartAreas.Clear(); 
    chart1.Series.Clear(); 
    ChartArea CA = chart1.ChartAreas.Add("CA"); 
    Series S1 = chart1.Series.Add("S1"); 
    S1.ChartType = SeriesChartType.Column; // whatever.. 

    // a few restriction for my own files: 
    CA.AxisX.Maximum = new DateTime(2014, 12, 31).ToOADate(); 
    DirectoryInfo dInfo = new DirectoryInfo("D:\\"); 
    FileInfo[] Files = dInfo.GetFiles("f*.png"); 

    // staying with the file info list! 
    //List<string> fileNames = new List<string>(); 
    //List<DateTime> fileDates = new List<DateTime>(); 

    chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.White; 
    chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.White; 
    chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Solid; 
    chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; 
    chart1.ChartAreas[0].AxisX.LabelStyle.ForeColor = Color.White; 
    chart1.ChartAreas[0].AxisY.LabelStyle.ForeColor = Color.White; 
    chart1.ChartAreas[0].AxisX2.Enabled = AxisEnabled.True; 

    S1.IsValueShownAsLabel = true; 
    S1.LabelFormat = "YYY.MM"; 

    // restrict to 20 files max: 
    for (int i = 0; i < Math.Min(20, Files.Length); i++) 
    { 
     FileInfo FI = Files[i]; 
     int p = chart1.Series[0].Points.AddXY(FI.CreationTime, 1); 
     S1.Points[p].Label = Path.GetFileNameWithoutExtension(FI.FullName); 
    } 
0

我希望这适合你需要:不幸的是,轴标签并不完美,这就是为什么您可以通过取消注释完全删除它们他前三行代码。

//Just pass your list of dates to this function 
private void DrawTimeline(List<DateTime> dates) 
{ 

    //chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Black; 
    //chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.White; 
    //chart1.ChartAreas[0].AxisX.LabelStyle.Enabled = false; 
    chart1.ChartAreas[0].AxisY.IsStartedFromZero = false; 

    //initialize a legend with some settings 
    chart1.Legends.Clear(); 
    chart1.Legends.Add("Timespans"); 
    chart1.Legends[0].LegendStyle = LegendStyle.Table; 
    chart1.Legends[0].Docking = Docking.Bottom; 
    chart1.Legends[0].Alignment = StringAlignment.Center; 
    chart1.Legends[0].Title = "Timespans"; 
    chart1.Legends[0].BorderColor = Color.Black; 

    chart1.Series.Clear(); 
    string seriesname; 
    //adding the bars with some settings 
    for (int i = 0; i < dates.Count-1; i++) 
    { 
     seriesname = Convert.ToString(dates[i].Date + " - " + dates[i + 1].Date); 
     chart1.Series.Add(seriesname); 
     chart1.Series[seriesname].ChartType = SeriesChartType.RangeBar; 
     chart1.Series[seriesname].YValuesPerPoint = 2; 
     chart1.Series[seriesname].Points.AddXY("Timeline", dates[i].Date, dates[i + 1].Date); 
     chart1.Series[seriesname]["DrawSideBySide"] = "false"; 
     chart1.Series[seriesname].BorderColor = Color.Black; 
     chart1.Series[seriesname].ToolTip = seriesname; 
    } 
}