2010-11-22 56 views
0

我們使用dotNETCHARTING來描繪我們的圖表,他們接受Series爲他們的SeriesCollection。這是我正在處理的一個新圖表,所有以前的圖表都顯示值與提取值之間存在1:1的關係。現在我有一個值列表,顯示爲值列表12:12。我需要從一個系列移動到兩個系列

我目前有我的2列數據顯示(實際與預算過去12個月) - 但在一個Series,他們應該是2 Series。我已經根據需要對數據進行了排序和列出,幾乎列在正確的位置。

限制:.NET 3.5(VS2008),dotNETCHARTING。

如果我必須爲每個月創建12個SQL併爲預算創建12個SQL,這將是一個非常令人難過的解決方案。從我看到的不是必要的,只要我找到一種方法將每個列表分離爲單獨的Series

每個模塊都有一個List<ModuleValue>,我試過用Dictionary<int, List<ModuleValue>>,以便每個系列的值(12個月)可以有一個單獨的列表。

我已經嘗試了對於每個值列表,將列表中的每個值添加到Series,直到出現值列表。 (ForeachForeach

我的問題是:任何人都可以給我一些可能的解決方案的指針。如果沒有一個接一個地排隊,而是在相同的時間範圍(月)開始並結束,則下面的圖表是正確的。例如,1月份的預算與1月份的實際值相比,我並不是在詢問dotNETCHARTING模塊,它們有很多幫助。我正在問這個問題,以及它如何將數據提供給模塊。

主要邏輯體:

 
     protected override void CreateChildControls() 
     { 
      base.CreateChildControls(); 

      //_chart.Type = ChartType.Combo; 
      _chart.DefaultSeries.Type = SeriesType.Line; 

// Up for change - between here 
      IList listSeries = new List(); 
      listSeries.Add(GetSeries(_module)); // This line should be listSeries = GetMultipleSeries(_module); or to that effect. 

      foreach (var series in listSeries) 
      { 
       _chart.SeriesCollection.Add(series); 
      } 
// Up for change - and here 

      // This shows the title above the chart: 
      _chart.Title = _module.Title; 
      // This shows the title below the chart: 
      //_chart.XAxis.Label = new Label(_module.Title); 

      _chart.TitleBox.Line.Color = Charter.BackgroundColor; 

      base.SetAreaStyles(); 
      base.SetLinkUrl(_module.LinkUrl); 
     } 

這種邏輯是舊的邏輯,應該保持原樣 - 因爲所有其他圖表依靠它。 可以作爲參考。考慮鎖定這個邏輯。

 
     protected Series GetSeries(FrontModule module) 
     { 
      Series series = new Series(module.Title); 

      foreach (var value in module.Values) 
      { 
       string sFieldTitle = value.Text; 

       Element element = new Element(sFieldTitle, value.Value); 

       element.Color = Charter.GetColor(value.ColorIndex); 

       series.Elements.Add(element); 

       string sToolTip = string.Format 
        ("{0}: {1:N0}" 
        , value.Tooltip 
        , value.Value); 

       element.ToolTip = sToolTip; 

       if (!string.IsNullOrEmpty(value.LinkUrl)) 
       { 
        element.URL = Page.ResolveUrl(value.LinkUrl); 
       } 

       ChartTooltip += string.Concat(sToolTip, ", "); 
      } 

      ChartTooltip += "\n"; 

      return series; 
     } 

這是新的邏輯,應該改變以反映所需的邏輯。考慮這是免費的。

 
     protected List GetMultipleSeries(FrontModule module) 
     { 
      List listSeries = new List(); 
      Series series = new Series(module.Title); 

      foreach (var keyPair in module.DictionaryValues) 
      { 
       string sFieldTitle = keyPair.Value.Text; 

       Element element = new Element(sFieldTitle, keyPair.Value.Value); 

       element.Color = Charter.GetColor(keyPair.Value.ColorIndex); 

       series.Elements.Add(element); 

       string sToolTip = string.Format 
        ("{0}: {1:N0}" 
        , keyPair.Value.Tooltip 
        , keyPair.Value.Value); 

       element.ToolTip = sToolTip; 

       if (!string.IsNullOrEmpty(keyPair.Value.LinkUrl)) 
       { 
        element.URL = Page.ResolveUrl(keyPair.Value.LinkUrl); 
       } 

       ChartTooltip += string.Concat(sToolTip, ", "); 

      } 

      listSeries.Add(series); 

      ChartTooltip += "\n"; 

      return listSeries; 
     } 

alt text

這是應該不應該,在sequal線列表數據。雖然它顯示它具有所有必需的數據。

我很感激你可以添加任何東西。謝謝。

回答

1

需要兩個Series對象:

protected List GetMultipleSeries(FrontModule module) 
    { 
     List listSeries = new List(); 
     Series seriesActual = new Series(module.Title); 
     Series seriesBudgetted = new Series(module.Title); 

     foreach (var keyPair in module.DictionaryValues) 
     { 
      string sFieldTitle = keyPair.Value.Text; 

      Element element = new Element(sFieldTitle, keyPair.Value.Value); 

      element.Color = Charter.GetColor(keyPair.Value.ColorIndex); 

      // Is is actual or budgetted 
      if (keyPair.Value.IsActual) 
       seriesActual.Elements.Add(element); 
      else 
       seriesBudgetted.Elements.Add(element); 

      string sToolTip = string.Format 
       ("{0}: {1:N0}" 
       , keyPair.Value.Tooltip 
       , keyPair.Value.Value); 

      element.ToolTip = sToolTip; 

      if (!string.IsNullOrEmpty(keyPair.Value.LinkUrl)) 
      { 
       element.URL = Page.ResolveUrl(keyPair.Value.LinkUrl); 
      } 

      ChartTooltip += string.Concat(sToolTip, ", "); 

     } 

     listSeries.Add(seriesActual); 
     listSeries.Add(seriesBudgetted); 

     ChartTooltip += "\n"; 

     return listSeries; 
    } 

我假設你有測試某種方式點是否是實際或budgetted的if語句。

+0

哦,你在那裏說些什麼。讓我測試一下。乾杯。 – DoStuffZ 2010-11-22 13:17:08

+0

是的...我愛你......;) – DoStuffZ 2010-11-22 13:27:55

+0

@DoStuffZ:很高興能幫到你。 – 2010-11-22 13:48:53

相關問題