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

何が起こるかというと、独自のシリーズの各ユーザー ID の CountElem と AddedDate ごとに描画するのではなく、1 つのシリーズのすべてのユーザー 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++;
        }

問題は、シリーズを「分割」する方法がわからないことです。各シリーズのすべてのデータを描画し、シリーズの各開始点と終了点の間に線を作成します。

各シリーズが 1 つのユーザー ID に対してのみ描画されるように定義する方法はありますか?

シリーズごとに1つのデータテーブルを提供したい気がします。しかし、これがどのように行われるのかわかりません。また、これが機能するように設計されているとは信じていません...

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 に答える