快速折线图中显示的空数据点不正确

Incorrect empty datapoints display in a fastline chart

我有一个快速折线图系列,其中 X 上有 DateTime 值,Y 上有 double 值 - 系列是使用以下方法添加到图表中的:

public virtual bool AddOrUpdateSeries(int caIndex, Series newSeries, bool visibleInLegend)
{
    var chartArea = GetChartArea(caIndex);

    if (chartArea == null) return false;

    var existingSeries = _chart.Series.FirstOrDefault(s => s.Name == newSeries.Name);

    if (existingSeries != null)
    {
        existingSeries.Points.Clear();
        AddPoints(newSeries.Points, existingSeries);
    }
    else
    {
        newSeries.ChartArea = chartArea.Name;
        newSeries.Legend = chartArea.Name;
        newSeries.IsVisibleInLegend = visibleInLegend;
        newSeries.BorderWidth = 2;
        newSeries.EmptyPointStyle = new DataPointCustomProperties { Color = Color.Red };

        _chart.Series.Add(newSeries);
    }

    return true;
}

如您所见,我将空点的样式设置为红色。

第一个添加到系列中的点如下:

所以如你所见,前两个点具有相同的 Y 值,但另外 - 第一个设置了 IsEmpty 标志。

用这样一段代码将空点添加到系列中:

 series.Points.Add(new DataPoint
 {
    XValue = _beginOADate, 
    YValues = new[] { firstDbPoint.Y }, 
    IsEmpty = true
 });

其中 _beginOADate 是双 OADate 值 = 42563 = 12/07/2016 00:00 as DateTime.

第二个点的DateTime15/08/2016 22:20

当图表以 X 轴的开头显示时,一切看起来都正常,如下图所示 - 空数据点从 2016 年 7 月 12 日开始一直持续到 2016 年 8 月 15 日。

但是,当我在 X 上滚动一个位置时,没有显示空数据点的红线 - 相反,显示了空数据点线的整个可见部分,因为它是非空的:

有人知道如何修复此行为,以便从空数据点开始到第一个非空数据点的整行始终显示为红色吗?

当然,虚拟解决方案是在非常靠近第一个非空点的地方再添加一个额外的空数据点,但我不喜欢该解决方案。

ChartType.FastLine 比简单的 Line 图表要快得多,但如此之快,它在渲染方面做了一些简化,这意味着并非所有图表功能都受支持:

The FastLine chart type is a variation of the Line chart that significantly reduces the drawing time of a series that contains a very large number of data points. Use this chart in situations where very large data sets are used and rendering speed is critical.

Some charting features are omitted from the FastLine chart to improve performance. The features omitted include control of point level visual attributes, markers, data point labels, and shadows.

可惜EmptyPointStyle就是这样的'点级视觉属性'。

所以你需要决定哪个更重要:原始速度还是直接合理地处理空DataPoints

(我预感你会选择 'dummy solution',我认为这是第一个 class 解决方法;-)