2012-10-11 27 views
1

這就是圖目前正在尋找這樣的:ASP:從數據表圖與多個系列

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 

什麼恰巧它爲一個系列中的所有用戶標識繪製了所有的CountElem和AddedDate,而不是爲每個用戶標識的每個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

你可以嘗試綁定你的系列與過濾的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值。

希望這會有所幫助

+0

謝謝!這工作完美! :) –

+0

@BjørnØyvindHalvorsen:不客氣:-) 另外,如果你有很多用戶和行,組合foreach + select可能會非常昂貴。基於單個Linq groupby的方法會更好。 – jbl

+0

我已經把所有的數據都整齊地分組了,但是謝謝你=) –