0

I have a report that uses parameters to hide or show data on a chart at runtime. I have the following code to read the parameter and use it to control the visibility of the axes.

        ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[0].Value);
        ((SplineSeriesView)xrChart1.Series[1].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[1].Value);
        ((SplineSeriesView)xrChart1.Series[2].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[2].Value);
        ((SplineSeriesView)xrChart1.Series[3].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[3].Value);
        ((SplineSeriesView)xrChart1.Series[4].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[4].Value);
        ((SplineSeriesView)xrChart1.Series[5].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[5].Value); 

Because series 0 and series 1 are both tied to the same axis, I am using an or operator. The problem that I am having is that the axis will not hide when they are both false. This is the code that I am using:

        bool zero = Convert.ToBoolean(this.Parameters[0].Value);
        bool one = Convert.ToBoolean(this.Parameters[1].Value);

        if ((zero = true)||(one = true))
        {
            ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;

        }

        else if ((zero = false) && (one = false))
        {
            ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
        }

How can I get the axis to hide? Thank you in advance for your help.

4

2 回答 2

1

我认为您的问题在于使用“=”而不是“==”。表达式zero = true设置为零true,该true值用作表达式值。因此,在第一个条件检查后,“零”总是变为真,而“其他”分支永远不会执行,因为“零”不再是假的。

实际上,表达式zero == true等于 just zero,因此您可以简化您的条件:

    bool zero = Convert.ToBoolean(this.Parameters[0].Value);
    bool one = Convert.ToBoolean(this.Parameters[1].Value);

    if (zero || one) // true if 'zero' or 'one' is true
    {
        ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
    }
    else // goes here if both 'zero' and 'one' is false
    {
        ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
    }

甚至

    bool zero = Convert.ToBoolean(this.Parameters[0].Value);
    bool one = Convert.ToBoolean(this.Parameters[1].Value);
    bool axisVisible = zero || one;

    ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = axisVisible;
于 2013-06-18T16:00:38.450 回答
1

==记住相等比较和 settor operator之间的区别很重要=。在您的if声明中,您正在使用设置器,并希望使用比较。

如果您使用正确的运算符,您的代码可能如下所示,这应该可以解决您的问题:

    if ((zero == true)||(one == true))
    {
        ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;

    }
    else if ((zero == false) && (one == false))
    {
        ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
    }

您遇到问题的原因是您使用了设置器,它自动将零和一设置为真。因此,该程序将您的if陈述评估为:“如果(真或真)”,这总是正确的。这就是为什么将值设置为 false 不起作用的原因。

顺便说一句,你可以做一些事情来避免这个错误。首先,您的编译器应该警告您您没有使用相等运算符。其次,您可以养成将常量放在首位的习惯:if (false = zero)会产生编译时错误。(就我个人而言,我真的不喜欢那种编码风格,我读起来不干净,但你的里程可能会有所不同。)

我会重写你的陈述,使其更简洁,但功能上相当:

if (zero || one)
{
    ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else
{
    ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}

当您将布尔变量放入 if 语句时,没有充分的理由将它们与布尔常量进行比较。你的第二个if根本没有必要,因为如果第一个没有,这是唯一可能发生的情况。(即“如果!(零 || 一)” === “!零 && !一” - 它被称为德摩根规则。)

实际上,您的整个 if 语句可以浓缩为一条清晰的线:

    ((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = zero || one;
于 2013-06-18T16:01:21.440 回答