创建图表系列,添加数据和设置可见性

时间:2017-02-22 09:25:17

标签: c# charts mschart

我试图创建一组图表系列,向系列添加数据,然后通过使它们可见来显示一些系列。数据发生变化,用户可以选择要查看的系列。我认为这种方法比使用chart.Series.Clear();清除所有系列更好,然后以相同的方法重新创建系列。

例如,具有随机里程的拼车中的汽车列表,然后选择要显示的汽车。

下面的代码不起作用(我已经评论过哪里)。该系列不公开,我认为需要将它们添加到像SeriesCollection这样的公共收藏中,但我不确定如何。

感谢您的帮助。

// create new chart series and add to a chartarea
        ChartArea TestChartArea = new ChartArea();
        public void CreateChartSeries()
        {
            List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" };

            foreach (string Car in lstCars)
            {
                // car series created correctly?
                var Srs = new Series(Car); 
                Srs.ChartArea = TestChart.Name;
                Srs.YAxisType = AxisType.Primary;
                Srs.Color = Color.Red;
                Srs.ChartType = SeriesChartType.Line;
                TestChart.Series.Add(Srs);
            }
        }

        // add data to chart series
        public void SeriesData()
        {
            List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" };
            int[] Xseries = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            int[] Milage = new int[10];

            Random Random = new Random();

            foreach (string Car in lstCars)
            {
                for (int M = 0; M < 10; M++)
                    Milage[M] = Random.Next(150, 15000);

                // not sure how to call and add data to each series
                Srs.Points.DataBindXY(Xseries, Milage);  
            }
        }

        // plot series - some visible
        public void PlotCreatedSeries()
        {
            // not sure how to refer to each series
            Mazda.Enabled = true;  
            Tesla.Enabled = false;
            Honda.Enabled = true;
            Jaguar.Enabled = false;
            Ford.Enabled = true;
            Toyota.Enabled = false;
        }

1 个答案:

答案 0 :(得分:1)

用于创建'Srs'的名称Series仅在范围内,即在循环内可用。在循环结束时,您会将新创建的Series添加到Chart

 TestChart.Series.Add(Srs);

Series 属性 是公开SeriesCollection。这有点令人困惑,因为单数类型名称和复数属性名称在这种情况下是相同的,例如,与Legend(s)或{相反{1}} ..

从现在开始,您可以通过索引访问它。

ChartArea(s)

..或更可读,更稳定,由 Series s = TestChart.Series[0] // the series you have added first 属性:

Name

请注意,&#39; name&#39; 也是一个棘手的词:

当您声明变量时,您会给它一个名称&#39;。 Series s = TestChart.Series["Mazda"] // the same series TestChart.Series["Mazda"].Enabled = true;

但是许多对象也有一个名为Series s = new Series();属性Name

前者必须是唯一的,但后者只是一个字符串;确保它也是独一无二的,但系统不会保护你。

前者永远不会改变,但是,如你所见,可能超出范围;后者只是一个字符串,你可以改变它。

请注意,只要变量本身仍在某处引用,变量本身就不会离开scop,这里是s.Name = "Volvo";的一个元素..

是否要直接添加SeriesiesCollection Series绑定取决于您。

对于前者,有many binding个选项。

对于后者,您可以使用Chart.Points methods ..:

  • DataPoints
  • Add(DataPoint)
  • AddY(YValue)

请注意,有时候,特别是对于实时图表,使用AddXY(XValues, YValue(s))方法之一插入 DataPoint是有意义的!

请在MSDN中查找!如果x值是非数字的或者没有实际意义,例如名称,那么中间版本才有意义。 - 请注意,将有意义的x值添加为数字(或{ {1}})对于将其用于更多目标至关重要,例如工具提示,缩放或显示范围等。

不这样做可能是新手们最常犯的错误。 InsertXXX 看起来不错,但内部数据已损坏,读取丢失。