如何在UltraDataChart中基于DataTable实现多折线图展示
使用UltraDataChart实现多折线图(基于你的DataTable数据)
别担心,我来帮你搞定这个UltraDataChart的多折线实现!先给你写一个展示Line1和Line2两条折线的示例,理解之后你可以轻松改成通用循环来处理所有线路。
第一步:准备你的DataTable数据
先把你提供的DataTable创建代码放进来,确保数据没问题:
DataTable table = new DataTable(); table.Columns.Add("YEAR", typeof(string)); table.Columns.Add("LINE_NAME", typeof(string)); table.Columns.Add("COUNT", typeof(double)); table.Rows.Add(new object[] {"2018", "Line1" , 2 }); table.Rows.Add(new object[] {"2017", "Line2" , 6 }); table.Rows.Add(new object[] {"2018", "Line2" , 1 }); table.Rows.Add(new object[] {"2011", "Line3" , 35 }); table.Rows.Add(new object[] {"2013", "Line3" , 143 }); table.Rows.Add(new object[] {"2014", "Line3" , 108 }); table.Rows.Add(new object[] {"2015", "Line3" , 50 }); table.Rows.Add(new object[] {"2016", "Line3" , 44 }); table.Rows.Add(new object[] {"2017", "Line3" , 34 }); table.Rows.Add(new object[] {"2013", "Line4" , 3 }); table.Rows.Add(new object[] {"2014", "Line4" , 6 }); table.Rows.Add(new object[] {"2015", "Line4" , 4 }); table.Rows.Add(new object[] {"2016", "Line4" , 1 }); table.Rows.Add(new object[] {"2017", "Line4" , 2 });
第二步:配置UltraDataChart并添加折线(示例:Line1和Line2)
假设你已经在WinForms窗体里添加了一个UltraDataChart控件(命名为dataChart),接下来在窗体的Load事件里添加以下代码:
private void Form1_Load(object sender, EventArgs e) { // 1. 配置X轴:使用CategoryXAxis,绑定YEAR字段 var xAxis = new CategoryXAxis(); xAxis.DataSource = table; xAxis.Label = "{Item}"; xAxis.MemberPath = "YEAR"; dataChart.Axes.Add(xAxis); // 2. 配置Y轴:使用NumericYAxis,绑定COUNT字段 var yAxis = new NumericYAxis(); yAxis.Label = "{Value}"; dataChart.Axes.Add(yAxis); // 3. 创建Line1的折线系列 var line1Series = new LineSeries(); line1Series.DataSource = table.AsEnumerable().Where(row => row["LINE_NAME"].ToString() == "Line1").CopyToDataTable(); line1Series.XAxis = xAxis; line1Series.YAxis = yAxis; line1Series.XMemberPath = "YEAR"; line1Series.YMemberPath = "COUNT"; line1Series.Name = "Line1"; // 图例显示的名称 dataChart.Series.Add(line1Series); // 4. 创建Line2的折线系列 var line2Series = new LineSeries(); line2Series.DataSource = table.AsEnumerable().Where(row => row["LINE_NAME"].ToString() == "Line2").CopyToDataTable(); line2Series.XAxis = xAxis; line2Series.YAxis = yAxis; line2Series.XMemberPath = "YEAR"; line2Series.YMemberPath = "COUNT"; line2Series.Name = "Line2"; // 图例显示的名称 dataChart.Series.Add(line2Series); // 可选:显示图例 dataChart.Legend = new UltraLegend(); }
第三步:改成通用循环实现所有折线
如果你要自动生成所有LINE_NAME对应的折线,只需要把上面创建单个Series的代码改成循环即可:
// 获取所有不重复的LINE_NAME var uniqueLineNames = table.AsEnumerable() .Select(row => row["LINE_NAME"].ToString()) .Distinct() .ToList(); // 遍历每个线路,创建折线系列 foreach (var lineName in uniqueLineNames) { var lineSeries = new LineSeries(); lineSeries.DataSource = table.AsEnumerable().Where(row => row["LINE_NAME"].ToString() == lineName).CopyToDataTable(); lineSeries.XAxis = xAxis; lineSeries.YAxis = yAxis; lineSeries.XMemberPath = "YEAR"; lineSeries.YMemberPath = "COUNT"; lineSeries.Name = lineName; dataChart.Series.Add(lineSeries); }
关键说明
- 确保你的项目已经引用了Infragistics.Win.DataChart相关的程序集
CategoryXAxis适合字符串类型的年份作为X轴,NumericYAxis对应数值类型的COUNT- 每个
LineSeries需要绑定单独的筛选后数据源,这样每条折线对应一个线路的数据 - 设置
Series.Name可以让图例正确显示每条折线的名称
内容的提问来源于stack exchange,提问作者SwiftHands
相关产品推荐
相关产品推荐

