Visifire 图表反转循环顺序

Posted

技术标签:

【中文标题】Visifire 图表反转循环顺序【英文标题】:Visifire Chart Reversed loop order 【发布时间】:2017-05-06 13:16:32 【问题描述】:

我正在运行一个 foreach 循环,返回结果如下:

1
2
3
4
5
6
7
8
9
10

但是,我将这些结果作为数据点放在 foreach 中。 但是在页面本身上,结果会被交换。 他们是这样出现的:

10
9
8
7
6
5
4
3
2
1

foreach 循环如下所示:

int count = 0;
foreach (DetectorStatu status in loadOperation.Entities.OrderBy(d => d.Status))

    Detector selectedDetector = status.Detector as Detector;
    bool isAtlasFO = selectedDetector.EnabledDetectorTypes.Count(d => d.DetectorTypeID == 1) > 0;
    
    if (isAtlasFO)
    
        DataPoint dataPoint1 = new DataPoint()
        
            YValue = status.Status * 100.0,
            ToolTipText = GetTooltipText(status),
            Cursor = Cursors.Hand,
            Tag = status.Detector,
            AxisXLabel = status.DetectorID.ToString() + " ⚫"
        ;

        DataPoint dataPoint2 = new DataPoint()
        
            YValue = DateTimeOffset.Now.Subtract(status.DateTime).TotalHours,
            ToolTipText = GetTooltipText(status),
            Cursor = Cursors.Hand,
            Tag = status.Detector,
            AxisXLabel = status.DetectorID.ToString() + " ⚫"
        ;

        dataPoint1.MouseLeftButtonDown += DataPointClicked;
        dataPoint2.MouseLeftButtonDown += DataPointClicked;

        chart.Series[0].DataPoints.Add(dataPoint1);
        chart.Series[1].DataPoints.Add(dataPoint2);
        count++;
        if (count == 10)
        
            break;
        //Break loop when 25 is hit.
    //End if Atlas FO
//End Foreach loop

现在我的问题是:

foreach 循环得到的结果与第一个示例一样。但是,数据点会像第二个示例一样交换它们。

如何阻止这种情况发生?

使用当前代码 (Orderby) 它会返回:

使用 OrderbyDescending 会返回:

现在我想要的是 orderByAscending。但是反过来了。因为现在它在顶部而不是底部显示最好的。

我也不能接受 x(我以前做的),因为现在我正在使用 if 语句。

例如:

1
2 //
3 //
4 //
5
6
7 //
8
9 //
10

这些是我获得的前 10 个结果(如果我要求的话)。但是后面有//的就是符合我的if语句的。

所以在这种情况下,我取 10 但只取 5。 这也是为什么我在我的 foreach 中有一个计数。它计算结果,当我达到 10 时,它会中断循环。

【问题讨论】:

什么是状态?那里有订单详情吗? 状态从 0,01 变为 1。所以基本上我在我的问题中显示了有序,但随后数字更大:) foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status)) ....你能试试 OrderByAscending 吗? 当我这样做时,它会向我显示我给出的示例中的结果。我希望它从坏(上)到好(下)但是相反,它从坏(下)到好(上) 【参考方案1】:

如果Status 持有该值,则您正在按降序循环,

foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status))

尝试使用 OrderBy(它将按升序排序)

foreach (DetectorStatu status in loadOperation.Entities.OrderBy(d => d.Status))

编辑:

您可以获得 Ordered 10 并将其反转,

 foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status).Where(d=> ((d as DetectorStatu).Detector as Detector).EnabledDetectorTypes.Count(d => d.DetectorTypeID == 1) > 0).Take(10).Reverse())

【讨论】:

对我的问题进行了编辑。您还可以看到 2 个完全不同的图像。这是因为我只抓取 10 个结果,而可能有 20+ 这样做时,我得到的结果与显示的图像相同。它从坏(底部)到好(顶部)。问题是,foreach 以正确的顺序给出了结果。但我认为正在发生的是第一个结果变成了一个数据点并被放置。然后第二个结果来了,也变成了一个数据点。但是被放置在第一个之上。但是我不知道如何解决这个问题。 @Mitch 你能把DataPoints存储到SeparateCollection,最后反转,然后分配给Chart系列吗? 还可以查看我的编辑。 让我们continue this discussion in chat。

以上是关于Visifire 图表反转循环顺序的主要内容,如果未能解决你的问题,请参考以下文章

Visifire charts ToolBar

想在WPF中做一些图表,有没有啥可用的图表控件啊?

需要在WPF中绘制曲线图,请问使用哪种控件比较好

wpf如何制作柱状图表,需要下载控件吗?我的vs是2012版的

如何在 FOR 循环中反转顺序

在 Laravel 中使用 Eloquent 使用 Foreach 循环反转数组元素的顺序