2016-11-03 1 views
-1

У меня есть база данных, содержащая значения разных дорожек.Dynamic Enabled = true на диаграмме C#

Например:

Трек 1:

Sensor 1 
Sensor 2 
Sensor 3 
Sensor 4 
Sensor 5 
Sensor 6 
Sensor 7 
Sensor 8 

Трек 2:

Sensor 1 
Sensor 2 
Sensor 3 
Sensor 4 
Sensor 5 
Sensor 6 
Sensor 7 
Sensor 8 
Sensor 9 
Sensor 10 
Sensor 11 
Sensor 12 

Как вы можете видеть Track 2 имеет 12 датчиков (Witch является m ах!).

Теперь я хочу отобразить значения датчиков на графике. Ведьма работает.

Однако на данный момент имеется 12 предметов с жестким кодом. Поэтому, когда есть 8 датчиков, легенда все равно покажет 12.

Теперь, что я сделал, было добавлено Enabled = False, поэтому вы его не увидите. (См. Пример ниже)

<chart:DataSeries x:Name="dsSensor1" Enabled="False" RenderAs="Line" LineThickness="3" LegendText="1" XValueType="DateTime" XValueFormatString="dd-MM HH:mm" YValueFormatString="#0.##'V'" MarkerEnabled="False"> 
    <chart:DataSeries.DataPoints> 
     <chart:DataPoint XValue="2001-01-01" YValue="3.2" Enabled="False"/> 
    </chart:DataSeries.DataPoints> 
</chart:DataSeries> 
<chart:DataSeries x:Name="dsSensor2" Enabled="False" RenderAs="Line" LineThickness="3" LegendText="2" XValueType="DateTime" XValueFormatString="dd-MM HH:mm" YValueFormatString="#0.##'V'" MarkerEnabled="False"> 
    <chart:DataSeries.DataPoints> 
     <chart:DataPoint XValue="2001-01-01" YValue="3.2" Enabled="False"/> 
    </chart:DataSeries.DataPoints> 
</chart:DataSeries> 

Прямо сейчас вы не увидите легенду.

Теперь я код я сделал новый цикл вроде этого:

foreach (DCHistory item in loadOperation.Entities.OrderByDescending(t => t.SensorNumber).Take(1)) 

Это будет принимать наибольшее количество определенной дорожки. Например, этот запрос приведет к .

Что я сделать прямо сейчас, то =

foreach (DCHistory item in loadOperation.Entities.OrderByDescending(t => t.SensorNumber).Take(1)) 
    { 
     DataSeries series1 = chart.Series.First(s => s.Name == string.Format("dsSensor1")); 
     DataSeries series2 = chart.Series.First(s => s.Name == string.Format("dsSensor2")); 
     DataSeries series3 = chart.Series.First(s => s.Name == string.Format("dsSensor3")); 
     DataSeries series4 = chart.Series.First(s => s.Name == string.Format("dsSensor4")); 
     DataSeries series5 = chart.Series.First(s => s.Name == string.Format("dsSensor5")); 
     DataSeries series6 = chart.Series.First(s => s.Name == string.Format("dsSensor6")); 
     DataSeries series7 = chart.Series.First(s => s.Name == string.Format("dsSensor7")); 
     DataSeries series8 = chart.Series.First(s => s.Name == string.Format("dsSensor8")); 
     DataSeries series9 = chart.Series.First(s => s.Name == string.Format("dsSensor9")); 
     DataSeries series10 = chart.Series.First(s => s.Name == string.Format("dsSensor10")); 
     DataSeries series11 = chart.Series.First(s => s.Name == string.Format("dsSensor11")); 
     DataSeries series12 = chart.Series.First(s => s.Name == string.Format("dsSensor12")); 
     int sensor = item.SensorNumber; 
     if (sensor == 8) 
     { 
      series1.Enabled = true; 
      series2.Enabled = true; 
      series3.Enabled = true; 
      series4.Enabled = true; 
      series5.Enabled = true; 
      series6.Enabled = true; 
      series7.Enabled = true; 
      series8.Enabled = true; 
     } 
    } 

Этот код будет рассчитывать, если результат равен 8. Если 8 включить первые 8 элементов в легенде.

Теперь это работает. Однако мне также нужно сделать один для таких же 12 датчиков, или 6. Это приведет к большому количеству кода, и все же это hardcoded!

Мой вопрос:

ли Возможное сделать это в цикле?

Я попробовал уже, но был unsuccesfull ...

Что я пробовал:

foreach (DCHistory item in loadOperation.Entities.OrderByDescending(t => t.SensorNumber).Take(1)) 
      { 
       int sensor = item.SensorNumber; 
       int sensor2 = sensor + 1; //set +1 because if number = 0, it gives error. 
       if (sensor >= 1) 
       { 
        for (int number = 1; number < sensor2; number++) 
        { 
         DataSeries series = chart.Series.First(s => s.Name == string.Format("dsSensor{0}", number)); 
         series.Enabled = true; 
        } 
       } 
      } 

Результатом этого кода является то, что легенда показывает мне 12 датчиков, даже если есть 8 .. .

ответ

0

ALright, у меня есть тент!

Я думаю, что как только я посетил трек с 12 датчиками, он удерживал датчик на Enabled = true.

Так что всякий раз, когда я посещал трек с 8 датчиками, старый включался.

Что я сделал в настоящее время:

 foreach (DCHistory item in loadOperation.Entities.OrderByDescending(t => t.SensorNumber).Take(1))//Gets highest sensor number of the track 
     { 
      var sensor = item.SensorNumber + 1;//Gets the number we just asked from the loop. For example 8 or 12. 
      var start = 1; 
      var max = 12; 

      while (start < sensor) 
      { 
       var test = chart.Series.First(s => s.Name == string.Format("dsSensor{0}", start.ToString())); 
       test.Enabled = true; 
       start++; 
      } 
      if (sensor < max) 
      { 
       while (sensor <= max) 
       { 
        var test2 = chart.Series.First(s => s.Name == string.Format("dsSensor{0}", sensor.ToString())); 
        test2.Enabled = false; 
        sensor++; 
       } 
      } 
     } 

В основном я сделал чек, что если количество датчика 8, например. Он будет проверять, если он ниже максимального. Если он ниже, отключите остальные.

0

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

var series = Enumerable.Range(1, item.SensorNumber) 
    .Select(i => chart.Series.First(s => s.Name == ("dsSensor" + i))) 
    .ToArray(); 

for(var i = 0; i < series.Length; ++i){ 
    series[i].Enabled = true; 
} 
+0

Когда я поставил это в цикле, у меня есть (тот, где я беру 1 результат). Я получаю то же самое, что и в моем последнем примере. И это то, что я получаю 12 датчиков, в то время как у меня есть только 8 – Mitch

+0

@Mitch Попробуйте использовать эту последнюю версию (я все еще был в льготный период), теперь она извлекает только 8 экземпляров серии –

+0

. Я положил ее внутри этого цикла: foreach (DCHistory item в loadOperation.Entities.OrderByDescending (t => t.SensorNumber) .Take (1)) Однако все еще всегда возвращает 12:/ – Mitch

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