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

C#中如何从DataTable填充折线图并展示各日期产品数量

解决DataTable填充折线图的问题

你的现有代码存在三个核心问题:

  • 硬编码了系列名Petto,实际应该对应动态创建的各个产品系列
  • 所有数据点的Y值固定为"1",没有关联DataTable中对应产品和日期的Quantity值
  • 日期未按时间顺序排序,导致折线图X轴逻辑混乱

以下是修改后的完整代码,可实现你需要的效果:

// 获取唯一日期并按时间排序,保证X轴顺序正确
var sortedDates = dt3.AsEnumerable()
                     .Select(row => DateTime.Parse(row["Date"].ToString()))
                     .Distinct()
                     .OrderBy(date => date)
                     .ToList();

// 获取唯一产品列表
var products = dt3.AsEnumerable()
                  .Select(row => row["Product"].ToString())
                  .Distinct()
                  .ToList();

// 为每个产品创建折线图系列
foreach (var product in products)
{
    var series = chart3.Series.Add(product);
    series.ChartType = SeriesChartType.Line; // 指定为折线图类型
}

// 遍历每个日期,为每个产品添加对应的数据点
foreach (var date in sortedDates)
{
    string dateStr = date.ToString("dd/MM/yyyy");
    foreach (var product in products)
    {
        // 匹配当前产品和日期的数据行
        var targetRow = dt3.AsEnumerable()
                           .FirstOrDefault(r => 
                               DateTime.Parse(r["Date"].ToString()) == date 
                               && r["Product"].ToString() == product);
        
        // 提取数量,无数据时用0填充
        int quantity = targetRow != null ? Convert.ToInt32(targetRow["Quantity"]) : 0;
        
        // 向对应产品系列添加数据点
        chart3.Series[product].Points.AddXY(dateStr, quantity);
    }
}

// 优化X轴显示(可选)
chart3.ChartAreas[0].AxisX.LabelStyle.Format = "dd/MM/yyyy";
chart3.ChartAreas[0].AxisX.Interval = 1; // 显示所有日期标签

关键说明:

  • 日期排序:通过OrderBy确保X轴日期按从早到晚的顺序排列,符合折线图的逻辑
  • 动态系列绑定:每个产品对应一个独立的折线系列,避免硬编码系列名
  • 数据匹配:通过FirstOrDefault精准匹配每个产品在对应日期的Quantity值,无数据时用0填充保证折线连续
  • 轴配置:可选的X轴格式设置,让日期标签显示更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:06:31