1

这是图表当前的样子:

示例图

这是我从中获取数据的一些数据表:

CountElem   userid  AddedDate
1433        1   2012-10-08
1327        1   2012-10-09
1514        1   2012-10-10
793         1   2012-10-11
219         6   2012-08-12
249         6   2012-08-13
289         6   2012-08-14
319         6   2012-08-15
233         6   2012-08-16

发生的情况是它为一个系列中的所有用户标识绘制所有 CountElem 和 AdditionalDate,而不是为它自己的系列中的每个用户标识绘制每个 CountElem 和 AdditionalDate。

这是我的代码:

        mainChart.DataSource = dataTable;
        foreach (DataRow dataRow in users.Rows)
        {
            Series s = new Series("Userid_" + dataRow["userid"]);
            s.ChartType = SeriesChartType.Spline;

            if (colors.Length == i)
                i = 0;
            s.Color = colors[i];

            s.XValueMember = "AddedDate";
            s.YValueMembers = "CountElements";

            mainChart.Series.Add(s);
            i++;
        }

我无法弄清楚如何“拆分”该系列的问题。它绘制每个系列中的所有数据,然后在系列的每个开始和停止之间产生线条。

有没有办法定义每个系列只为一个用户标识绘制?

我想为每个系列提供一个数据表。但我不知道如何做到这一点,我不相信这是它设计的工作方式......

4

1 回答 1

1

您可以尝试将您的系列与过滤的 DataRow 集绑定,如下所示(未经测试,对任何语法错误表示抱歉):

    foreach (DataRow dataRow in users.Rows)
    {
        Series s = new Series("Userid_" + dataRow["userid"]);
        s.ChartType = SeriesChartType.Spline;

        s.Color = colors[i % colors.Count()];

        var userRows = dataTable.Rows.Cast<DataRow>().Select(r=>r["userid"]==dataRow["userid"]).ToArray();

        s.Points.DataBindXY(userRows,"AddedDate",userRows,"CountElements");

        mainChart.Series.Add(s);
        i++;
    }

无论如何,请注意,除非您的所有系列都对齐(即:共享完全相同的 x 值集),否则图表引擎将完全搞砸缺少 x 值。您可能必须用空点填充缺失的 x 值。

希望这会有所帮助

于 2012-10-12T12:17:31.373 回答