我在MScharts控件中有多个系列的设置。
通过这种方法,我想在它们之间切换。
第一次调用此方法,一切都很好,并且系列可以正确显示。
第二次及其后的每次,方法调用都会在控件中绘制一个红叉。没有异常被抛出。

    private void EnableChart(Series series)
    {
        if (series != null)
        {
            chart1.Series.Clear();
            chart1.Series.Add(series);
            double maxval = series.Points.FindMaxByValue("X").XValue;
            chart1.DataSource = series;
            chart1.ChartAreas[0].AxisX.Title = series.Name;
            chart1.DataBind();
            chart1.ChartAreas[0].AxisX.Maximum = maxval; //if commented out = ok
        }
    }


如果我注释掉最后一行,则会显示图表,但带有旧系列的X轴值,因此我看不到任何数据。

编辑:解决。

如果我使用

 chart1.ChartAreas[0].RecalculateAxesScale();


代替

 chart1.ChartAreas[0].AxisX.Maximum = maxval;


一切正常。

最佳答案

RecalculateAxesScale()解决您的问题,因为此行:

chart1.DataBind();


将数据绑定到图形,如果在绑定后添加一个点,则必须重新计算轴:

chart1.ChartAreas[0].RecalculateAxesScale();


所以解决这个问题的更好方法:

    private void EnableChart(Series series)
    {
        if (series != null)
        {
            chart1.Series.Clear();
            chart1.Series.Add(series);
            double maxval = series.Points.FindMaxByValue("X").XValue;
            chart1.DataSource = series;
            chart1.ChartAreas[0].AxisX.Title = series.Name;

            //switch latest lines and you haven't to recalculate axes
            chart1.ChartAreas[0].AxisX.Maximum = maxval;
            chart1.DataBind();
        }
    }

关于c# - mscharts在红十字会中设置Xaxis最高结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15190347/

10-12 22:28