【问题标题】:Re entering data for a graph为图表重新输入数据
【发布时间】:2013-05-17 21:15:29
【问题描述】:

我在 c# 中的 windowsform 有一个图表。当我第一次输入数据时,图表工作正常,当我单击清除时,一切都清除了。问题是当我第二次输入数据并尝试加载图形 c# 然后给我错误。

    private void button2_Click(object sender, EventArgs e)
    {
        //Graph codes
        if (p == 1)
        {
            if (t == 1)
            {
                if (txtFirstActual.Text == "" || txtSecondActual.Text == "" || txtThirdActual.Text == "" || txtFourthActual.Text == "")
                {
                    MessageBox.Show("Enter All Value Of Actual Years");
                }
                else
                {
                    int m = Convert.ToInt32(txtForecastingYear.Text);

                    int FirstYearValue = m - 4;
                    txtFirstYear.Text = FirstYearValue.ToString();

                    int SecondYearValue = m - 3;
                    txtSecondYear.Text = SecondYearValue.ToString();

                    int ThirdYearValue = m - 2;
                    txtThirdYear.Text = ThirdYearValue.ToString();

                    int FourthYearValue = m - 1;
                    txtFourthYear.Text = FourthYearValue.ToString();

                    double FirstActual = Convert.ToDouble(txtFirstActual.Text);
                    double SecondActual = Convert.ToDouble(txtSecondActual.Text);
                    double ThirdActual = Convert.ToDouble(txtThirdActual.Text);
                    double FourthActual = Convert.ToDouble(txtFourthActual.Text);


                    if (FirstActual == 0 && SecondActual != 0 && ThirdActual != 0 && FourthActual != 0) //if the user entered 3 years instead of 4
                    {

                        double sum = (SecondActual + ThirdActual + FourthActual) / 3;

                        listBox1.Items.Clear();
                        listBox1.Items.Add(sum);


                        this.chart1.Series["Sales"].Points.AddXY("Year-3", SecondActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-2", ThirdActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-1", FourthActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year", sum);
                    }
                    else if (FirstActual != 0 && SecondActual == 0 && ThirdActual != 0 && FourthActual != 0)//if the user entered 3 years instead of 4
                    {
                        double sum = (FirstActual + ThirdActual + FourthActual) / 3;

                        listBox1.Items.Clear();
                        listBox1.Items.Add(sum);

                        this.chart1.Series["Sales"].Points.AddXY("Year-4", FirstActual);

                        this.chart1.Series["Sales"].Points.AddXY("Year-2", ThirdActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-1", FourthActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year", sum);
                    }
                    else if (FirstActual != 0 && SecondActual != 0 && ThirdActual == 0 && FourthActual != 0)//if the user entered 3 years instead of 4
                    {
                        double sum = (FirstActual + SecondActual + FourthActual) / 3;

                        listBox1.Items.Clear();
                        listBox1.Items.Add(sum);

                        this.chart1.Series["Sales"].Points.AddXY("Year-4", FirstActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-3", SecondActual);

                        this.chart1.Series["Sales"].Points.AddXY("Year-1", FourthActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year", sum);
                    }

                    else if (FirstActual != 0 && SecondActual != 0 && ThirdActual != 0 && FourthActual == 0)//if the user entered 3 years instead of 4
                    {

                        double sum = (FirstActual + SecondActual + ThirdActual) / 3;

                        listBox1.Items.Clear();
                        listBox1.Items.Add(sum);

                        this.chart1.Series["Sales"].Points.AddXY("Year-4", FirstActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-3", SecondActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-2", ThirdActual);

                        this.chart1.Series["Sales"].Points.AddXY("Year", sum);
                    }

                    else if (FirstActual != 0 && SecondActual != 0 && ThirdActual != 0 && FourthActual != 0)//if the user entered 4 years 
                    {

                        double sum = (FirstActual + SecondActual + ThirdActual + FourthActual) / 4;

                        listBox1.Items.Clear();
                        listBox1.Items.Add(sum);

                        this.chart1.Series["Sales"].Points.AddXY("Year-4", FirstActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-3", SecondActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-2", ThirdActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year-1", FourthActual);
                        this.chart1.Series["Sales"].Points.AddXY("Year", sum);
                    }

                    else if (FirstActual != 0 && SecondActual != 0 && ThirdActual != 0 && FourthActual != 0)//if the user entered 4 years 
                    {

                        double sum = (FirstActual + SecondActual + ThirdActual + FourthActual) / 4;

                        listBox1.Items.Clear();
                        listBox1.Items.Add(sum);

                        MessageBox.Show(" Can't drow graph because there are no sales");
                    }
                }
                if (t == 0)
                {
                    MessageBox.Show("Enter Actual for Years");
                }
            }
            if (p == 0)
            {
                MessageBox.Show("Enter Wanted Year");
            }

那是我的清除按钮: 私人无效按钮1_Click(对象发送者,EventArgs e) { // 清除按钮

        listBox1.Items.Clear();

        txtForecastingYear.Clear();
        txtFirstYear.Clear();
        txtSecondYear.Clear();
        txtThirdYear.Clear();
        txtFourthYear.Clear();

        chart1.Series.Clear();

        txtFirstActual.Clear();
        txtSecondActual.Clear();
        txtThirdActual.Clear();
        txtFourthActual.Clear();

        if (!String.IsNullOrEmpty(txtFirstActual.Text)) //if there is entry then make clear button available, if not the button will do nothing
        {
            // clear data
        }

【问题讨论】:

  • 错误信息是什么?此外,我们还需要查看清除代码。
  • 这就是 c# 所说的:在“SeriesCollection”中找不到名为“Sales”的图表元素。这些是清算代码(我已经更新了帖子)
  • 您是否正在清除chart1 控件?或致电.Dispose()
  • 我正在使用这个:chart1.Series.Clear();在清除按钮中清除图表

标签: c# graph drawing


【解决方案1】:

您的代码取决于“销售”系列,如下例所示:

this.chart1.Series["Sales"].Points.AddXY("Year-4", FirstActual);
this.chart1.Series["Sales"].Points.AddXY("Year-3", SecondActual);
this.chart1.Series["Sales"].Points.AddXY("Year-2", ThirdActual);
this.chart1.Series["Sales"].Points.AddXY("Year-1", FourthActual);
this.chart1.Series["Sales"].Points.AddXY("Year", sum);

但是,可能当您清除图表时,您也在清除图表的系列,因此,第二次,图表无法识别系列“销售”

要更正此问题,您需要检查系列是否存在,如果为空则创建它。像这样的:

if (this.chart1.Series.Count == 0)
{
    // Here you need to properly create the series
    this.chart1.Series.Add(new Series("Sales"));
}

这是一个通用示例,可​​能无法编译,因为我不知道您使用的系列类型或图表控件的类型。所以一定要相应地改变。

如果你不知道如何调用本系列的构造函数,可以看一下Designer.cs文件,复制这段代码中的构造函数和属性就可以了。

【讨论】:

    【解决方案2】:

    看起来您的问题是,当您调用chart1.Series.Clear() 时,它会清除chart1 的所有索引,然后当您再次单击以填充图表时,您将永远不会再次创建“销售”索引。您需要再次将“销售”图表添加到 Series,然后才能对其调用方法。

    【讨论】:

    • 你的意思是我应该创建另一个 int 吗?
    • 参考上面的答案,他提供了代码示例,说的是同样的事情,只是更好=)
    • 谢谢!你的显然更优雅;)
    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多