MS图表C#折线图在有间隙的数据上不准确

MS图表C#折线图在有间隙的数据上不准确,c#,mschart,C#,Mschart,我在下面展示了一些代码,它们在datagridview中循环并绘制数据图。我遇到的问题是,有时数据在有间隙时排列不正确。我有多台设备将数据吐入我的datagridview,有时该单元将不报告2份报告,因此数据存在缺口,但我仍然希望数据正确排列。我如何做到这一点?下面的图表将更好地描述该问题。我使用的是MSCharts、Winforms、C#和.net4 //for each column in my datagridview for (int i = 0; i < currentDGV.R

我在下面展示了一些代码,它们在datagridview中循环并绘制数据图。我遇到的问题是,有时数据在有间隙时排列不正确。我有多台设备将数据吐入我的datagridview,有时该单元将不报告2份报告,因此数据存在缺口,但我仍然希望数据正确排列。我如何做到这一点?下面的图表将更好地描述该问题。我使用的是MSCharts、Winforms、C#和.net4

//for each column in my datagridview
for (int i = 0; i < currentDGV.Rows.Count; i++)
{
     //for each column in each row in my datagridview
     for (int j = 2; j < currentDGV.Columns.Count - 5; j++)
     {
         //make sure the column is visible and isnt a outlier
         if (currentDGV.Columns[j].Visible == true &&      (bool)currentDGV.Rows[i].Cells[OUTLIER_VALUE].Value != true)
         {
            string deviceName = currentDGV.Rows[i].Cells[DEVICE_NAME_VALUE].Value.ToString();
            string currentSize = currentDGV.Columns[j].HeaderText;
            string currentTime = currentDGV.Rows[i].Cells[DATETIME_VALUE].Value.ToString();
            string currentSizeValue = currentDGV.Rows[i].Cells[j].Value.ToString();

            createNewSeries(deviceName + " - " + currentSize);
            plotValueOnSeries(deviceName + " - " + currentSize, currentTime, currentSizeValue);
          }
      }
 }

private void createNewSeries(String SeriesName)
    {
        if (tempChart != null)
        {
            if (tempChart.Series.IsUniqueName(SeriesName))
            {
                tempChart.Series.Add(SeriesName);
                //tempChart.Series[SeriesName].IsXValueIndexed = true;
                //tempChart.Series[SeriesName].XValueType = ChartValueType.DateTime;
            }
        }
    }

    private void plotValueOnSeries(String SeriesName, string XValue, string YValue)
    {
        if (tempChart != null)
        {
            if (radioButtonStep.Checked == true)
                tempChart.Series[SeriesName].ChartType = SeriesChartType.StepLine;
            else if (radioButtonSpline.Checked == true)
                tempChart.Series[SeriesName].ChartType = SeriesChartType.Spline;
            else if (radioButtonPoint.Checked == true)
                tempChart.Series[SeriesName].ChartType = SeriesChartType.Point;
            else
                tempChart.Series[SeriesName].ChartType = SeriesChartType.Line;

            tempChart.Series[SeriesName].Points.AddXY(XValue, YValue);
        }
    }
//对于我的datagridview中的每一列
对于(int i=0;i

必须正确转换日期字符串值,否则图表控件将使用它们作为简单标签。设置
XValueType==ChartValueType.DateTime
是不够的。您应该使用
DateTime.ToOADate()
转换将时间戳作为双精度传递,如下例所示:

        chart1.ChartAreas[0].AxisX.LabelStyle.Format = "hh:mm";

        Series s1 = new Series("s1");
        s1.XValueType = ChartValueType.DateTime;
        s1.Points.AddXY(Convert.ToDateTime("10:01").ToOADate(), 1);
        s1.Points.AddXY(Convert.ToDateTime("10:02").ToOADate(), 2);
        s1.Points.AddXY(Convert.ToDateTime("10:03").ToOADate(), 3);
        s1.Points.AddXY(Convert.ToDateTime("10:04").ToOADate(), 4);
        s1.Points.AddXY(Convert.ToDateTime("10:07").ToOADate(), 5);            
        chart1.Series.Add(s1);

        Series s2 = new Series("s2");
        s2.XValueType = ChartValueType.DateTime;
        s2.Points.AddXY(Convert.ToDateTime("10:01").ToOADate(), 10);
        s2.Points.AddXY(Convert.ToDateTime("10:02").ToOADate(), 9);
        s2.Points.AddXY(Convert.ToDateTime("10:05").ToOADate(), 8);
        s2.Points.AddXY(Convert.ToDateTime("10:06").ToOADate(), 7);
        s2.Points.AddXY(Convert.ToDateTime("10:09").ToOADate(), 6);
        chart1.Series.Add(s2);


谢谢,我不认为我能解决这个问题。使用ToOADate就可以做到这一点。