2017-02-22 24 views
0

Я пытаюсь создать группу диаграммных рядов, добавить данные в серию, а затем показать несколько серий, сделав их видимыми. Данные изменяются, и пользователь может выбрать, какую серию просматривать. Я думаю, что этот метод будет лучше, чем очистка всех серий с помощью chart.Series.Clear();, а затем воссоздание серии по тому же методу.Создайте диаграмму, добавьте данные и установите видимость

Например, список автомобилей в автобазе со случайными милями, а затем выберите, какие автомобили показывать.

Код ниже не работает (я прокомментировал, где). Серия не является публичной, и я думаю, что их нужно добавить в публичную коллекцию, например, SeriesCollection, но я не уверен, как это сделать.

Спасибо за любую помощь.

// create new chart series and add to a chartarea 
     ChartArea TestChartArea = new ChartArea(); 
     public void CreateChartSeries() 
     { 
      List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" }; 

      foreach (string Car in lstCars) 
      { 
       // car series created correctly? 
       var Srs = new Series(Car); 
       Srs.ChartArea = TestChart.Name; 
       Srs.YAxisType = AxisType.Primary; 
       Srs.Color = Color.Red; 
       Srs.ChartType = SeriesChartType.Line; 
       TestChart.Series.Add(Srs); 
      } 
     } 

     // add data to chart series 
     public void SeriesData() 
     { 
      List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" }; 
      int[] Xseries = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
      int[] Milage = new int[10]; 

      Random Random = new Random(); 

      foreach (string Car in lstCars) 
      { 
       for (int M = 0; M < 10; M++) 
        Milage[M] = Random.Next(150, 15000); 

       // not sure how to call and add data to each series 
       Srs.Points.DataBindXY(Xseries, Milage); 
      } 
     } 

     // plot series - some visible 
     public void PlotCreatedSeries() 
     { 
      // not sure how to refer to each series 
      Mazda.Enabled = true; 
      Tesla.Enabled = false; 
      Honda.Enabled = true; 
      Jaguar.Enabled = false; 
      Ford.Enabled = true; 
      Toyota.Enabled = false; 
     } 

ответ

1

Имя 'Srs' используется для создания Series только в рамках т.е. используемой внутри цикла. В конце цикла вы добавляете вновь созданный Series к вашему Chart:

TestChart.Series.Add(Srs); 

Seriesсвойствоявляется публичной SeriesCollection. Это немного сбивает с толком, так как особого типа имени и множественной собственностью имени одинакова в этом случае, как противостоять, скажем, Legend(s) или ChartArea(s) ..

Теперь вы можете получить доступ к нему либо по его индексу ..

Series s = TestChart.Series[0] // the series you have added first 

..or, более читаемым и более стабильным, его Name собственности:

Series s = TestChart.Series["Mazda"] // the same series 

TestChart.Series["Mazda"].Enabled = true; 

Заметим, что 'name' также является сложным словом:

Когда вы объявляете переменную, вы даете ей «имя». Series s = new Series();

Но многие объекты также имеют свойство под названием Name: s.Name = "Volvo";

Бывший должен быть уникальным, но последний просто строка; действительно сохраняйте его уникальным, но система не будет вас охранять.

Первое никогда не может измениться, но, как вы видели, может выйти из сферы действия; последний - это просто строка, и вы можете ее изменить.

Обратите внимание, что сама переменная не выходит из СКОП до тех пор, как он по-прежнему ссылается где-то здесь, как элемент SeriesiesCollection Series ..

Если вы хотите, чтобы добавить DataPoints связаны или напрямую вам решать.

Для первых есть many binding вариантов.

Для последнего можно использовать Chart.Points methods ..:

  • Add(DataPoint)
  • AddY(YValue)
  • AddXY(XValues, YValue(s))

Обратите внимание, что иногда, особенно с живыми чартов, имеет смысл вставки a DataPoint с использованием одного из InsertXXX методов!

Посмотрите это в MSDN! Средняя версия имеет смысл только в том случае, если значения x не являются числовыми или не имеют никакого реального значения, например, имена .. - Обратите внимание, что добавление значимых значений x как номеров (или DateTimes) имеет решающее значение для использования их для дальнейших целей, таких как всплывающие подсказки, диапазоны увеличения или отображения и т. д.

Неспособность сделать это, вероятно, самая распространенная ошибка, которую совершают новички. Chartвыглядит нормально, но данные внутри сломаны, считаются потерянными.

+0

Спасибо TaW - с вашей помощью я получил код для работы! – Zeus