2010-11-22 2 views
0

Мы используем dotNETCHARTING для отображения наших графиков, они принимают Series за свои SeriesCollection. Это новая диаграмма, над которой я работаю, все предыдущие имеют отношение 1: 1 между показанным показанием и извлеченным значением. Теперь у меня есть список значений, отображаемых в виде списка значений 12:12.Мне нужно переместиться из одной серии в две серии

В настоящее время у меня есть 2 списка данных (фактические и бюджетные за последние 12 месяцев), но в одном Series, где они должны быть 2 Series. У меня есть данные, отсортированные и перечисленные по мере необходимости, которые почти перечислены правильно.

Ограничения: .NET 3.5 (VS2008), dotNETCHARTING.

Это будет очень грустное решение, если мне нужно создать 12 SQL за каждый месяц и 12 для бюджета. Из того, что я вижу, это не обязательно, как только я нахожу способ разделить каждый список на отдельный Series.

Каждый модуль имеет List<ModuleValue>, я пробовал с Dictionary<int, List<ModuleValue>>, так что каждая серия значений (12 месяцев) могла иметь отдельный список.

Я пробовал для каждого списка значений, добавить каждое значение в список до Series, повторить до тех пор, пока из списка значений не будет. (Foreach in a Foreach)

Мой вопрос: может ли кто-нибудь дать мне несколько указателей на возможное решение. График, приведенный ниже, соответствует правильному, если они не были выстроены один за другим, но начинались и заканчивались в один и тот же таймфрейм (месяц). Например, бюджет для Jan сравнивается с фактическим для января. Я не спрашиваю о модуле 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

Это, как это не должно быть, перечисляя данные в сиквеле линии. Хотя он показывает, что он имеет все необходимые данные.

Буду признателен за все, что вы могли бы добавить. Спасибо.

ответ

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 для заявления, если точки.

+0

О, ты говоришь что-то там. Позвольте мне проверить это. Приветствия. – DoStuffZ

+0

ДА ... Я ЛЮБЛЮ U MAN ..;) – DoStuffZ

+0

@DoStuffZ: Рад, что я мог бы помочь. –

Смежные вопросы