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

Infragistics LineSeries二级系列与图例不显示问题求解

问题描述

我有一个包含3列的DataTable,希望在Ultra Data Chart中展示对应不同INST_ID的系列数据及图例。但INST_ID的数量不固定,可能存在5个不同的取值。当前仅显示了一组数据,图例也未正常显示,附上当前效果截图及实现代码,请问如何实现展示所有INST_ID对应的系列及图例?

当前效果截图:当前效果截图

实现代码:

private void Form1_Load(object sender, EventArgs e)
{ 
    dtLineTest.Columns.Add("SAMPLE_TIME",typeof(DateTime));
    dtLineTest.Columns.Add("INST_ID", typeof(Int32));
    dtLineTest.Columns.Add("VALUE", typeof(Int32));

    dtLineTest.Rows.Add(DateTime.Now,1,14);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-1), 1, 18);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-2), 1, 11);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-3), 1, 7);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-4), 1, 21);

    dtLineTest.Rows.Add(DateTime.Now, 2, 16);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-1), 2, 3);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-2), 2, 5);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-3), 2, 12);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-4), 2, 13);

    var xAxis = new CategoryXAxis();
    var yAxis = new NumericYAxis();

    xAxis.DataSource = dtLineTest;
    xAxis.Label = "SAMPLE_TIME";

    var legend = new UltraLegend();
    var lineSeries = new LineSeries();
    lineSeries.DataSource = dtLineTest;
    lineSeries.ValueMemberPath = "VALUE";
    lineSeries.Title = "INST_ID";
    lineSeries.XAxis = xAxis;
    lineSeries.YAxis = yAxis;
    lineSeries.Legend = legend;

    ultraDataChart1.Axes.Add(xAxis);
    ultraDataChart1.Axes.Add(yAxis);
    ultraDataChart1.Series.Add(lineSeries);
}
解决方案

问题核心是仅创建了单个LineSeries,未按INST_ID分组生成对应数据系列,同时图例未添加到图表控件中。按以下方式修改即可:

  1. 按INST_ID分组获取独立数据源
    从DataTable中提取所有唯一的INST_ID,为每个ID单独筛选对应的数据行,作为该系列的专属数据源。

  2. 为每个分组创建LineSeries
    遍历每个INST_ID,创建对应的LineSeries,配置好数据源、值字段、标识性标题,并关联坐标轴和图例。

  3. 将图例添加到图表控件
    创建UltraLegend后,必须将其加入ultraDataChart1.Legends集合,否则图例无法显示。

修改后的完整代码:

private void Form1_Load(object sender, EventArgs e)
{ 
    dtLineTest.Columns.Add("SAMPLE_TIME",typeof(DateTime));
    dtLineTest.Columns.Add("INST_ID", typeof(Int32));
    dtLineTest.Columns.Add("VALUE", typeof(Int32));

    dtLineTest.Rows.Add(DateTime.Now,1,14);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-1), 1, 18);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-2), 1, 11);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-3), 1, 7);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-4), 1, 21);

    dtLineTest.Rows.Add(DateTime.Now, 2, 16);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-1), 2, 3);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-2), 2, 5);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-3), 2, 12);
    dtLineTest.Rows.Add(DateTime.Now.AddMinutes(-4), 2, 13);

    var xAxis = new CategoryXAxis();
    var yAxis = new NumericYAxis();

    xAxis.DataSource = dtLineTest;
    xAxis.Label = "SAMPLE_TIME";

    // 创建图例并添加到图表
    var legend = new UltraLegend();
    ultraDataChart1.Legends.Add(legend);

    // 获取所有唯一的INST_ID
    var uniqueInstIds = dtLineTest.AsEnumerable()
                                 .Select(row => row.Field<int>("INST_ID"))
                                 .Distinct()
                                 .ToList();

    // 为每个INST_ID创建系列
    foreach (var instId in uniqueInstIds)
    {
        // 筛选当前INST_ID的数据
        var filteredData = dtLineTest.AsEnumerable()
                                     .Where(row => row.Field<int>("INST_ID") == instId)
                                     .CopyToDataTable();

        var lineSeries = new LineSeries();
        lineSeries.DataSource = filteredData;
        lineSeries.ValueMemberPath = "VALUE";
        lineSeries.Title = $"INST_ID_{instId}"; // 标题用INST_ID标识,图例中会显示
        lineSeries.XAxis = xAxis;
        lineSeries.YAxis = yAxis;
        lineSeries.Legend = legend;

        ultraDataChart1.Series.Add(lineSeries);
    }

    ultraDataChart1.Axes.Add(xAxis);
    ultraDataChart1.Axes.Add(yAxis);
}

关键说明

  • 分组筛选数据:通过LINQ提取唯一INST_ID并筛选对应数据,确保每个系列只展示对应ID的数值。
  • 动态创建系列:遍历每个ID生成LineSeries,不管INST_ID数量多少,都会自动生成对应数据系列。
  • 图例显示:将UltraLegend加入图表的Legends集合,每个系列关联该图例后,图例会自动显示各系列的标识标题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:35:30