You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中DateTime类型数据无法添加至折线图的问题求助

解决DataGridView DateTime列作为折线图X轴并仅显示秒和毫秒的问题

原代码的核心问题

  1. X轴数值转换逻辑错误:直接截取DateTime字符串的部分内容转成Double,完全不符合Chart控件对DateTime类型X轴的数值要求——Chart的DateTime轴使用**OADate(OLE自动化日期)**格式,不是截取的秒毫秒字符串转的数字,所以设置Minimum/Maximum的方式无效。
  2. Series操作顺序错误:chart1.Series.Clear()之后访问chart1.Series[0]会触发索引越界异常,因为清空后没有任何Series实例。
  3. Y轴配置不匹配:Y轴是数值型,却设置了DateTimeIntervalType.Auto,类型完全不兼容。

修正后的代码实现

private void Laden_Click(object sender, EventArgs e)
{
    var objChart = chart1.ChartAreas[0];
    
    // 重置ChartArea基础配置
    objChart.AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Milliseconds;
    objChart.AxisY.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Number; // Y轴为数值型,对应Number类型
    objChart.AxisY.Minimum = 0.0;
    objChart.AxisY.Maximum = 1.0;

    // 清空旧Series并创建新折线Series
    chart1.Series.Clear();
    var lineSeries = new System.Windows.Forms.DataVisualization.Charting.Series("DataSeries");
    lineSeries.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
    lineSeries.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime; // 明确X轴为DateTime类型
    chart1.Series.Add(lineSeries);

    // 绑定数据源
    lineSeries.XValueMember = dataGridView1.Columns[0].DataPropertyName;
    lineSeries.YValueMembers = dataGridView1.Columns[1].DataPropertyName;
    chart1.DataSource = dataGridView1.DataSource;

    // 设置X轴标签格式,仅显示秒和毫秒
    objChart.AxisX.LabelStyle.Format = "ss.fff";

    // 正确设置X轴范围(转换为Chart识别的OADate格式)
    if (dataGridView1.Rows.Count > 0)
    {
        var startTime = Convert.ToDateTime(dataGridView1.Rows[0].Cells[0].Value);
        var endTime = Convert.ToDateTime(dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Value);
        objChart.AxisX.Minimum = startTime.ToOADate();
        objChart.AxisX.Maximum = endTime.ToOADate();
    }
}

关键说明

  • X轴类型绑定:必须设置Series.XValueType = ChartValueType.DateTime,让Chart明确识别X轴数据为时间类型,而非普通数字。
  • 标签格式化:通过AxisX.LabelStyle.Format = "ss.fff"直接控制显示内容,ss代表两位秒,fff代表三位毫秒,无需手动截取字符串。
  • 轴范围设置:使用DateTime.ToOADate()将时间转换为Chart兼容的Double数值,这是控件处理DateTime轴的标准方式。
  • Series操作修复:清空旧Series后先创建新实例再绑定数据源,避免索引越界问题。

内容的提问来源于stack exchange,提问作者Zaros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:20:24