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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:18