ASP:具有许多系列的数据表的图表

时间:2012-10-11 11:41:46

标签: c# mschart

这就是图表目前的样子:

Example graph

这是我从以下网站获取数据的一些数据表:

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

它会在一个系列中为所有用户ID绘制所有CountElem和AddedDate,而不是为其自己的系列中的每个用户ID绘制每个CountElem和AddedDate。

这是我的代码:

        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++;
        }

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

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

我觉得每个系列提供一个数据表。但我无法知道如何做到这一点,我不相信它的工作方式......

1 个答案:

答案 0 :(得分: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值。

希望这会有所帮助