2016-11-03 44 views
-1

我有一個數據庫女巫包含不同的軌道值。Dynamic Enabled =在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 

正如你可以看到軌道2具有12個傳感器(巫是米斧頭!)。

現在我想要在圖表中顯示傳感器的值。女巫正在工作。

但是現在硬編碼有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個。 這將導致很多代碼,並仍然是硬編碼

我的問題:

它是更多鈔票,使這個在for循環?

我已經嘗試過,但就是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

好吧,我已經得到了!

我認爲,一旦我訪問了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

當然,我會轉換你的代碼來使用一些Linq來代替。

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 in loadOperation.Entities.OrderByDescending(t => t.SensorNumber).Take(1)) 但是仍然總是返回12:/ – Mitch