我有一个包含不同曲目值的数据库。
例如:
第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是最大的!)。
现在我想在图表中显示传感器的值。女巫正在工作。
但是现在有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))
这将占用特定曲目的最高数量。例如,此查询将导致 8 。
我现在做的是=
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循环中进行此操作?
我已经尝试过但是没有成功......
我尝试了什么:
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;
}
}
}
这段代码的结果是,即使有8个......
,图例也会显示12个传感器答案 0 :(得分: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;
}
答案 1 :(得分: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。它会检查它是否低于最大值。如果它较低,则禁用其余部分。