C# mscharts在红十字会中设置Xaxis最大结果

C# mscharts在红十字会中设置Xaxis最大结果,c#,mschart,C#,Mschart,我在MScharts控件中设置了多个系列。 使用这种方法,我想在它们之间切换。 第一次调用此方法时,一切正常,序列显示正确。 第二次,每次之后,方法调用都会在控件中绘制一个红十字。没有抛出异常 private void EnableChart(Series series) { if (series != null) { chart1.Series.Clear(); chart1.Series.Add(

我在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;

一切正常。

重新计算EAXescale()
解决您的问题,因为这行:

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();
        }
    }

你可以回答你自己的问题并做标记。