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
相关产品推荐
相关产品推荐

