【问题标题】:Create chart series, add data and set visibility创建图表系列、添加数据和设置可见性
【发布时间】:2017-02-22 18:51:37
【问题描述】:

我正在尝试创建一组图表系列,将数据添加到系列中,然后通过使它们可见来显示一些系列。数据发生变化,用户可以选择查看哪个系列。我认为这种方法会比使用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;
        }

【问题讨论】:

    标签: c# charts mschart


    【解决方案1】:

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

     TestChart.Series.Add(Srs);
    

    Series 属性 公开的SeriesCollection。这有点令人困惑,因为在这种情况下,singular type 名称和 plural property 名称是相同的,而不是 Legend(s)ChartArea(s) ..

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

     Series s = TestChart.Series[0]  // the series you have added first
    

    ..或者,更易读和更稳定,通过它的Name 属性:

     Series s = TestChart.Series["Mazda"]   // the same series
    
     TestChart.Series["Mazda"].Enabled = true;  
    

    请注意,'name' 也是一个棘手的词:

    当你声明一个变量时,你给它一个“名字”。 Series s = new Series();

    但许多对象也有一个名为Name属性s.Name = "Volvo";

    前者必须是唯一的,而后者只是一个字符串;一定要保持它的唯一性,但系统不会保护你。

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

    请注意,变量本身不会超出范围,只要它仍然在某处被引用,这里作为SeriesiesCollection Series..的一个元素。

    是否要添加DataPoints绑定直接由您决定。

    对于前者,有many binding 选项。

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

    • Add(DataPoint)
    • AddY(YValue)
    • AddXY(XValues, YValue(s))

    请注意,有时,特别是对于实时图表,使用InsertXXX 方法之一插入 DataPoint 是有意义的!

    请在 MSDN 中查找!中间版本只有在 x 值不是数字或没有实际意义(例如名称)时才有意义。 - 请注意,将有意义的 x 值添加为 数字 (或 @ 987654346@) 对于将它们用于进一步的目标(如工具提示、缩放或显示范围等)至关重要。

    不这样做可能是新手最常犯的错误。 Chart 看起来还可以,但是里面的数据坏了,读取丢失了。

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2018-08-08
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多